X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.c;h=66e8c5ec41a4326e2f932aad6d6aa861b6d4ec00;hp=1602c4bde572e538482953ee10bff65d1624b5d9;hb=9edb962fd286e9f9a6fb2fd97a2317a1c29d64b0;hpb=878880321c4fa7ab0e431d22a3dd156a9a272c68 diff --git a/yaffs_guts.c b/yaffs_guts.c index 1602c4b..66e8c5e 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -17,6 +17,7 @@ #include "yaffs_guts.h" #include "yaffs_getblockinfo.h" #include "yaffs_tagscompat.h" +#include "yaffs_tagsmarshall.h" #include "yaffs_nand.h" #include "yaffs_yaffs1.h" #include "yaffs_yaffs2.h" @@ -3559,9 +3560,11 @@ int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset, } if (n_copy != dev->data_bytes_per_chunk || + !dev->param.cache_bypass_aligned || dev->param.inband_tags) { /* An incomplete start or end chunk (or maybe both * start and end chunk), or we're using inband tags, + * or we're forcing writes through the cache, * so we want to use the cache buffers. */ if (dev->param.n_caches > 0) { @@ -4529,30 +4532,29 @@ YCHAR *yaffs_get_symlink_alias(struct yaffs_obj *obj) /*--------------------------- Initialisation code -------------------------- */ -static int yaffs_check_dev_fns(const struct yaffs_dev *dev) +static int yaffs_check_dev_fns(struct yaffs_dev *dev) { + struct yaffs_param *param = &dev->param; + /* Common functions, gotta have */ - if (!dev->param.erase_fn || !dev->param.initialise_flash_fn) + if (!param->drv_initialise_fn || + !param->drv_read_chunk_fn || + !param->drv_write_chunk_fn || + !param->drv_erase_fn) return 0; - /* Can use the "with tags" style interface for yaffs1 or yaffs2 */ - if (dev->param.write_chunk_tags_fn && - dev->param.read_chunk_tags_fn && - !dev->param.write_chunk_fn && - !dev->param.read_chunk_fn && - dev->param.bad_block_fn && dev->param.query_block_fn) - return 1; + /* Install the default tags marshalling functions if needed. */ + yaffs_tags_compat_install(dev); + yaffs_tags_marshall_install(dev); - /* Can use the "spare" style interface for yaffs1 */ - if (!dev->param.is_yaffs2 && - !dev->param.write_chunk_tags_fn && - !dev->param.read_chunk_tags_fn && - dev->param.write_chunk_fn && - dev->param.read_chunk_fn && - !dev->param.bad_block_fn && !dev->param.query_block_fn) - return 1; + /* 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) + return 0; - return 0; /* bad */ + return 1; } static int yaffs_create_initial_dir(struct yaffs_dev *dev) @@ -4922,8 +4924,8 @@ void yaffs_deinitialise(struct yaffs_dev *dev) dev->is_mounted = 0; - if (dev->param.deinitialise_flash_fn) - dev->param.deinitialise_flash_fn(dev); + if (dev->param.drv_deinitialise_fn) + dev->param.drv_deinitialise_fn(dev); } }