Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0121ad62 authored by Akinobu Mita's avatar Akinobu Mita Committed by Linus Torvalds
Browse files

affs: use memweight()



Use memweight() to count the total number of bits set in memory area.

Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8fb980e3
Loading
Loading
Loading
Loading
+2 −26
Original line number Original line Diff line number Diff line
@@ -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);