diff options
author | Charles Manning <cdhmanning@gmail.com> | 2011-03-29 06:57:02 +1300 |
---|---|---|
committer | Charles Manning <cdhmanning@gmail.com> | 2011-03-29 06:57:02 +1300 |
commit | 1570788072c1154eff93282e0bb8564de40bd8aa (patch) | |
tree | fc0e11b7f406b5a6585eec9043642337abd0a49a /yaffs_nand.c | |
parent | bf4900527f7eab3a629498f2aedbaebf259a6f7a (diff) |
yaffs: Add first cut of block summary code
Some issues still need to be checked. In particular:
* Is free space handling correct?
* Is gc doing The Right Thing?
Signed-off-by: Charles Manning <cdhmanning@gmail.com>
Diffstat (limited to 'yaffs_nand.c')
-rw-r--r-- | yaffs_nand.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/yaffs_nand.c b/yaffs_nand.c index 0b59ec7..165d010 100644 --- a/yaffs_nand.c +++ b/yaffs_nand.c @@ -15,13 +15,14 @@ #include "yaffs_tagscompat.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++; @@ -31,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; @@ -51,8 +52,10 @@ 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; @@ -67,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 + result = yaffs_tags_compat_wr(dev, flash_chunk, buffer, tags); - return yaffs_tags_compat_wr(dev, nand_chunk, buffer, tags); + yaffs_summary_add(dev, tags, nand_chunk); + + return result; } int yaffs_mark_bad(struct yaffs_dev *dev, int block_no) |