X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_nand.c;h=165d01004d6efde447d4b88a42f38c74dafa5fed;hp=ff9daad6eab9eb7513eb5584840c47bec36db565;hb=cb185cec287359727e44321979ad2324b4fad7cb;hpb=f421449422a9107e857d90d306907084dad236fb diff --git a/yaffs_nand.c b/yaffs_nand.c index ff9daad..165d010 100644 --- a/yaffs_nand.c +++ b/yaffs_nand.c @@ -1,7 +1,7 @@ /* * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002-2010 Aleph One Ltd. + * Copyright (C) 2002-2011 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -13,16 +13,16 @@ #include "yaffs_nand.h" #include "yaffs_tagscompat.h" -#include "yaffs_tagsvalidity.h" #include "yaffs_getblockinfo.h" +#include "yaffs_summary.h" int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, u8 *buffer, struct yaffs_ext_tags *tags) { int result; struct yaffs_ext_tags local_tags; - int realigned_chunk = nand_chunk - dev->chunk_offset; + int flash_chunk = nand_chunk - dev->chunk_offset; dev->n_page_reads++; @@ -32,11 +32,11 @@ int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, if (dev->param.read_chunk_tags_fn) result = - dev->param.read_chunk_tags_fn(dev, realigned_chunk, buffer, + dev->param.read_chunk_tags_fn(dev, flash_chunk, buffer, tags); else result = yaffs_tags_compat_rd(dev, - realigned_chunk, buffer, tags); + flash_chunk, buffer, tags); if (tags && tags->ecc_result > YAFFS_ECC_RESULT_NO_ERROR) { struct yaffs_block_info *bi; @@ -52,17 +52,14 @@ int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk, const u8 *buffer, struct yaffs_ext_tags *tags) { + int result; + int flash_chunk = nand_chunk - dev->chunk_offset; + dev->n_page_writes++; - nand_chunk -= dev->chunk_offset; if (tags) { tags->seq_number = dev->seq_number; tags->chunk_used = 1; - if (!yaffs_validate_tags(tags)) { - yaffs_trace(YAFFS_TRACE_ERROR, - "Writing uninitialised tags"); - BUG(); - } yaffs_trace(YAFFS_TRACE_WRITE, "Writing chunk %d tags %d %d", nand_chunk, tags->obj_id, tags->chunk_id); @@ -73,10 +70,14 @@ int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev, } if (dev->param.write_chunk_tags_fn) - return dev->param.write_chunk_tags_fn(dev, nand_chunk, buffer, - tags); + result = dev->param.write_chunk_tags_fn(dev, flash_chunk, + buffer, tags); else - return yaffs_tags_compat_wr(dev, nand_chunk, buffer, tags); + result = yaffs_tags_compat_wr(dev, flash_chunk, buffer, tags); + + yaffs_summary_add(dev, tags, nand_chunk); + + return result; } int yaffs_mark_bad(struct yaffs_dev *dev, int block_no) @@ -84,8 +85,8 @@ int yaffs_mark_bad(struct yaffs_dev *dev, int block_no) block_no -= dev->block_offset; if (dev->param.bad_block_fn) return dev->param.bad_block_fn(dev, block_no); - else - return yaffs_tags_compat_mark_bad(dev, block_no); + + return yaffs_tags_compat_mark_bad(dev, block_no); } int yaffs_query_init_block_state(struct yaffs_dev *dev, @@ -97,9 +98,8 @@ int yaffs_query_init_block_state(struct yaffs_dev *dev, if (dev->param.query_block_fn) return dev->param.query_block_fn(dev, block_no, state, seq_number); - else - return yaffs_tags_compat_query_block(dev, block_no, - state, seq_number); + + return yaffs_tags_compat_query_block(dev, block_no, state, seq_number); } int yaffs_erase_block(struct yaffs_dev *dev, int flash_block)