X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;h=3c1aa105f35fcf18f1cb73cbe06f4dd0e3e20c7d;hp=66e8c5ec41a4326e2f932aad6d6aa861b6d4ec00;hb=87b33ecd1898c99b9aa2b0abcbb3e6002d6b3532;hpb=5587d9d89d5fb9c31fd723e85949f85da70ef3a9 diff --git a/yaffs_guts.c b/yaffs_guts.c index 66e8c5e..3c1aa10 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -609,10 +609,10 @@ static void yaffs_retire_block(struct yaffs_dev *dev, int flash_block) memset(buffer, 0xff, dev->data_bytes_per_chunk); memset(&tags, 0, sizeof(tags)); tags.seq_number = YAFFS_SEQUENCE_BAD_BLOCK; - if (dev->param.write_chunk_tags_fn(dev, chunk_id - - dev->chunk_offset, - buffer, - &tags) != YAFFS_OK) + if (dev->tagger.write_chunk_tags_fn(dev, chunk_id - + dev->chunk_offset, + buffer, + &tags) != YAFFS_OK) yaffs_trace(YAFFS_TRACE_ALWAYS, "yaffs: Failed to write bad block marker to block %d", flash_block); @@ -2798,7 +2798,8 @@ static int yaffs_check_gc(struct yaffs_dev *dev, int background) int erased_chunks; int checkpt_block_adjust; - if (dev->param.gc_control && (dev->param.gc_control(dev) & 1) == 0) + if (dev->param.gc_control_fn && + (dev->param.gc_control_fn(dev) & 1) == 0) return YAFFS_OK; if (dev->gc_disable) @@ -4534,13 +4535,17 @@ YCHAR *yaffs_get_symlink_alias(struct yaffs_obj *obj) static int yaffs_check_dev_fns(struct yaffs_dev *dev) { - struct yaffs_param *param = &dev->param; + struct yaffs_driver *drv = &dev->drv; + struct yaffs_tags_handler *tagger = &dev->tagger; /* Common functions, gotta have */ - if (!param->drv_initialise_fn || - !param->drv_read_chunk_fn || - !param->drv_write_chunk_fn || - !param->drv_erase_fn) + if (!drv->drv_read_chunk_fn || + !drv->drv_write_chunk_fn || + !drv->drv_erase_fn) + return 0; + + if (dev->param.is_yaffs2 && + (!drv->drv_mark_bad_fn || !drv->drv_check_bad_fn)) return 0; /* Install the default tags marshalling functions if needed. */ @@ -4548,10 +4553,10 @@ static int yaffs_check_dev_fns(struct yaffs_dev *dev) yaffs_tags_marshall_install(dev); /* Check we now have the marshalling functions required. */ - if (!param->write_chunk_tags_fn || - !param->read_chunk_tags_fn || - !param->query_block_fn || - !param->mark_bad_fn) + if (!tagger->write_chunk_tags_fn || + !tagger->read_chunk_tags_fn || + !tagger->query_block_fn || + !tagger->mark_bad_fn) return 0; return 1; @@ -4924,8 +4929,7 @@ void yaffs_deinitialise(struct yaffs_dev *dev) dev->is_mounted = 0; - if (dev->param.drv_deinitialise_fn) - dev->param.drv_deinitialise_fn(dev); + yaffs_deinit_nand(dev); } }