X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_summary.c;h=3c9e72321ea4ce6c4d03a545c34a0d6948cc8160;hp=20b27d843c739f4e222b7ddfe5132d9ea408f6e8;hb=6076b3bffffb8c1b26b41674cd9e6c5b7eeb1293;hpb=eeb0f17a7a2280ec4f20b46ec40a4997f1b7d2e7 diff --git a/yaffs_summary.c b/yaffs_summary.c index 20b27d8..3c9e723 100644 --- a/yaffs_summary.c +++ b/yaffs_summary.c @@ -29,15 +29,13 @@ #include "yaffs_getblockinfo.h" #include "yaffs_bitmap.h" -#define YAFFS_SUMMARY_VERSION 1 - /* * The summary is built up in an array of summary tags. * This gets written to the last one or two (maybe more) chunks in a block. * A summary header is written as the first part of each chunk of summary data. * The summary header must match or the summary is rejected. */ - + /* Summary tags don't need the sequence number because that is redundant. */ struct yaffs_summary_tags { unsigned obj_id; @@ -56,7 +54,7 @@ struct yaffs_summary_header { static void yaffs_summary_clear(struct yaffs_dev *dev) { - if(!dev->sum_tags) + if (!dev->sum_tags) return; memset(dev->sum_tags, 0, dev->chunks_per_summary * sizeof(struct yaffs_summary_tags)); @@ -82,7 +80,7 @@ int yaffs_summary_init(struct yaffs_dev *dev) sizeof(struct yaffs_summary_tags); chunks_used = (sum_bytes + dev->data_bytes_per_chunk - 1)/ - (dev->data_bytes_per_chunk - + (dev->data_bytes_per_chunk - sizeof(struct yaffs_summary_header)); dev->chunks_per_summary = dev->param.chunks_per_block - chunks_used; @@ -90,7 +88,7 @@ int yaffs_summary_init(struct yaffs_dev *dev) dev->chunks_per_summary; dev->sum_tags = kmalloc(sum_tags_bytes, GFP_NOFS); dev->gc_sum_tags = kmalloc(sum_tags_bytes, GFP_NOFS); - if(!dev->sum_tags || !dev->gc_sum_tags) { + if (!dev->sum_tags || !dev->gc_sum_tags) { yaffs_summary_deinit(dev); return YAFFS_FAIL; } @@ -107,14 +105,14 @@ static unsigned yaffs_summary_sum(struct yaffs_dev *dev) unsigned sum = 0; i = sizeof(struct yaffs_summary_tags) * - dev->chunks_per_summary;; - while(i > 0){ + dev->chunks_per_summary; + while (i > 0) { sum += *sum_buffer; sum_buffer++; i--; } - return sum; + return sum; } static int yaffs_summary_write(struct yaffs_dev *dev, int blk) @@ -139,12 +137,12 @@ static int yaffs_summary_write(struct yaffs_dev *dev, int blk) tags.chunk_id = 1; chunk_in_block = dev->chunks_per_summary; chunk_in_nand = dev->alloc_block * dev->param.chunks_per_block + - dev-> chunks_per_summary; + dev->chunks_per_summary; hdr.version = YAFFS_SUMMARY_VERSION; hdr.block = blk; hdr.seq = bi->seq_number; hdr.sum = yaffs_summary_sum(dev); - + do { this_tx = n_bytes; if (this_tx > sum_bytes_per_chunk) @@ -205,7 +203,7 @@ int yaffs_summary_read(struct yaffs_dev *dev, chunk_id = 1; do { this_tx = n_bytes; - if(this_tx > sum_bytes_per_chunk) + if (this_tx > sum_bytes_per_chunk) this_tx = sum_bytes_per_chunk; result = yaffs_rd_chunk_tags_nand(dev, chunk_in_nand, buffer, &tags); @@ -234,15 +232,14 @@ int yaffs_summary_read(struct yaffs_dev *dev, } while (result == YAFFS_OK && n_bytes > 0); yaffs_release_temp_buffer(dev, buffer); - if(result == YAFFS_OK) { - /* Verify header */ + if (result == YAFFS_OK) { + /* Verify header */ if (hdr.version != YAFFS_SUMMARY_VERSION || - hdr.block != blk || hdr.seq != bi->seq_number || hdr.sum != yaffs_summary_sum(dev)) - result = YAFFS_FAIL; + result = YAFFS_FAIL; } - + if (st == dev->sum_tags && result == YAFFS_OK) bi->has_summary = 1; @@ -258,17 +255,17 @@ int yaffs_summary_add(struct yaffs_dev *dev, int block_in_nand = chunk_in_nand / dev->param.chunks_per_block; int chunk_in_block = chunk_in_nand % dev->param.chunks_per_block; - if(!dev->sum_tags) + if (!dev->sum_tags) return YAFFS_OK; - if(chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) { + if (chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) { yaffs_pack_tags2_tags_only(&tags_only, tags); sum_tags = &dev->sum_tags[chunk_in_block]; sum_tags->chunk_id = tags_only.chunk_id; sum_tags->n_bytes = tags_only.n_bytes; sum_tags->obj_id = tags_only.obj_id; - if(chunk_in_block == dev->chunks_per_summary - 1) { + if (chunk_in_block == dev->chunks_per_summary - 1) { /* Time to write out the summary */ yaffs_summary_write(dev, block_in_nand); yaffs_summary_clear(dev); @@ -284,7 +281,7 @@ int yaffs_summary_fetch(struct yaffs_dev *dev, { struct yaffs_packed_tags2_tags_only tags_only; struct yaffs_summary_tags *sum_tags; - if(chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) { + if (chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) { sum_tags = &dev->sum_tags[chunk_in_block]; tags_only.chunk_id = sum_tags->chunk_id; tags_only.n_bytes = sum_tags->n_bytes; @@ -303,12 +300,13 @@ void yaffs_summary_gc(struct yaffs_dev *dev, int blk) if (!bi->has_summary) return; - for (i = dev->chunks_per_summary; i < dev->param.chunks_per_block; i++) { - if( yaffs_check_chunk_bit(dev, blk, i)) { + for (i = dev->chunks_per_summary; + i < dev->param.chunks_per_block; + i++) { + if (yaffs_check_chunk_bit(dev, blk, i)) { yaffs_clear_chunk_bit(dev, blk, i); bi->pages_in_use--; dev->n_free_chunks++; } } - }