X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_bitmap.c;h=4440e930d6bcd802a282c79651d9c00b9643be5d;hp=6be9d26fae1ec58b3f0bd637f7e83ab878656560;hb=33308768bd24abe4e1f59c5025a3dd824119ae1d;hpb=5062df7307f71d3374da87a7c69102dc3f09da28 diff --git a/yaffs_bitmap.c b/yaffs_bitmap.c index 6be9d26..4440e93 100644 --- a/yaffs_bitmap.c +++ b/yaffs_bitmap.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 @@ -23,7 +23,7 @@ static inline u8 *yaffs_block_bits(struct yaffs_dev *dev, int blk) yaffs_trace(YAFFS_TRACE_ERROR, "BlockBits block %d is not valid", blk); - YBUG(); + BUG(); } return dev->chunk_bits + (dev->chunk_bit_stride * (blk - dev->internal_start_block)); @@ -36,7 +36,7 @@ void yaffs_verify_chunk_bit_id(struct yaffs_dev *dev, int blk, int chunk) yaffs_trace(YAFFS_TRACE_ERROR, "Chunk Id (%d:%d) invalid", blk, chunk); - YBUG(); + BUG(); } } @@ -52,7 +52,6 @@ void yaffs_clear_chunk_bit(struct yaffs_dev *dev, int blk, int chunk) u8 *blk_bits = yaffs_block_bits(dev, blk); yaffs_verify_chunk_bit_id(dev, blk, chunk); - blk_bits[chunk / 8] &= ~(1 << (chunk & 7)); } @@ -61,15 +60,14 @@ void yaffs_set_chunk_bit(struct yaffs_dev *dev, int blk, int chunk) u8 *blk_bits = yaffs_block_bits(dev, blk); yaffs_verify_chunk_bit_id(dev, blk, chunk); - blk_bits[chunk / 8] |= (1 << (chunk & 7)); } int yaffs_check_chunk_bit(struct yaffs_dev *dev, int blk, int chunk) { u8 *blk_bits = yaffs_block_bits(dev, blk); - yaffs_verify_chunk_bit_id(dev, blk, chunk); + yaffs_verify_chunk_bit_id(dev, blk, chunk); return (blk_bits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0; } @@ -77,6 +75,7 @@ int yaffs_still_some_chunks(struct yaffs_dev *dev, int blk) { u8 *blk_bits = yaffs_block_bits(dev, blk); int i; + for (i = 0; i < dev->chunk_bit_stride; i++) { if (*blk_bits) return 1; @@ -90,15 +89,9 @@ int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk) u8 *blk_bits = yaffs_block_bits(dev, blk); int i; int n = 0; - for (i = 0; i < dev->chunk_bit_stride; i++) { - u8 x = *blk_bits; - while (x) { - if (x & 1) - n++; - x >>= 1; - } - blk_bits++; - } + for (i = 0; i < dev->chunk_bit_stride; i++, blk_bits++) + n += hweight8(*blk_bits); + return n; }