|
@@ -10,30 +10,6 @@
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
#include "affs.h"
|
|
#include "affs.h"
|
|
|
|
|
|
-/* This is, of course, shamelessly stolen from fs/minix */
|
|
|
|
-
|
|
|
|
-static const int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4 };
|
|
|
|
-
|
|
|
|
-static u32
|
|
|
|
-affs_count_free_bits(u32 blocksize, const void *data)
|
|
|
|
-{
|
|
|
|
- const u32 *map;
|
|
|
|
- u32 free;
|
|
|
|
- u32 tmp;
|
|
|
|
-
|
|
|
|
- map = data;
|
|
|
|
- free = 0;
|
|
|
|
- for (blocksize /= 4; blocksize > 0; blocksize--) {
|
|
|
|
- tmp = *map++;
|
|
|
|
- while (tmp) {
|
|
|
|
- free += nibblemap[tmp & 0xf];
|
|
|
|
- tmp >>= 4;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return free;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
u32
|
|
u32
|
|
affs_count_free_blocks(struct super_block *sb)
|
|
affs_count_free_blocks(struct super_block *sb)
|
|
{
|
|
{
|
|
@@ -317,7 +293,7 @@ int affs_init_bitmap(struct super_block *sb, int *flags)
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
pr_debug("AFFS: read bitmap block %d: %d\n", blk, bm->bm_key);
|
|
pr_debug("AFFS: read bitmap block %d: %d\n", blk, bm->bm_key);
|
|
- bm->bm_free = affs_count_free_bits(sb->s_blocksize - 4, bh->b_data + 4);
|
|
|
|
|
|
+ bm->bm_free = memweight(bh->b_data + 4, sb->s_blocksize - 4);
|
|
|
|
|
|
/* Don't try read the extension if this is the last block,
|
|
/* Don't try read the extension if this is the last block,
|
|
* but we also need the right bm pointer below
|
|
* but we also need the right bm pointer below
|
|
@@ -367,7 +343,7 @@ int affs_init_bitmap(struct super_block *sb, int *flags)
|
|
|
|
|
|
/* recalculate bitmap count for last block */
|
|
/* recalculate bitmap count for last block */
|
|
bm--;
|
|
bm--;
|
|
- bm->bm_free = affs_count_free_bits(sb->s_blocksize - 4, bh->b_data + 4);
|
|
|
|
|
|
+ bm->bm_free = memweight(bh->b_data + 4, sb->s_blocksize - 4);
|
|
|
|
|
|
out:
|
|
out:
|
|
affs_brelse(bh);
|
|
affs_brelse(bh);
|