lkml.org 
[lkml]   [2008]   [Feb]   [4]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateMon, 4 Feb 2008 20:15:03 +0100
FromJan Kara <>
SubjectRe: [PATCH 10/10] udf: constify udf_bitmap_lookup array
On Sat 02-02-08 22:37:07, Marcin Slusarz wrote:
> On Thu, Jan 31, 2008 at 05:52:44PM +0100, Jan Kara wrote:
> > On Wed 30-01-08 22:04:00, marcin.slusarz@gmail.com wrote:
> > > udf_bitmap_lookup never changes, so constify it
> > > 
> > > Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
> > > Cc: Jan Kara <jack@suse.cz>
> >   Hmm, rather than doing this, could you change the function to use
> > standard functions for counting set bits? I guess bitmap_weight() in
> > include/linux/bitmap.h should be what we need... Thanks.
> 
> ---
> udf: convert udf_count_free_bitmap to use bitmap_weight
> 
> replace handwritten bits counting with bitmap_weight
> 
> Signed-off-by: Marcin Slusarz <marcin.slusarz@gmail.com>
> Cc: Jan Kara <jack@suse.cz>
  Acked-by: Jan Kara <jack@suse.cz>

								Honza
> ---
>  fs/udf/super.c |   17 +++++------------
>  1 files changed, 5 insertions(+), 12 deletions(-)
> 
> diff --git a/fs/udf/super.c b/fs/udf/super.c
> index 3afe764..0dcee12 100644
> --- a/fs/udf/super.c
> +++ b/fs/udf/super.c
> @@ -53,6 +53,7 @@
>  #include <linux/vfs.h>
>  #include <linux/vmalloc.h>
>  #include <linux/errno.h>
> +#include <linux/bitmap.h>
>  #include <asm/byteorder.h>
> 
>  #include <linux/udf_fs.h>
> @@ -1969,10 +1970,6 @@ static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
>  	return 0;
>  }
> 
> -static unsigned char udf_bitmap_lookup[16] = {
> -	0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
> -};
> -
>  static unsigned int udf_count_free_bitmap(struct super_block *sb,
>  					  struct udf_bitmap *bitmap)
>  {
> @@ -1982,7 +1979,6 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
>  	int block = 0, newblock;
>  	kernel_lb_addr loc;
>  	uint32_t bytes;
> -	uint8_t value;
>  	uint8_t *ptr;
>  	uint16_t ident;
>  	struct spaceBitmapDesc *bm;
> @@ -2008,13 +2004,10 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
>  	ptr = (uint8_t *)bh->b_data;
> 
>  	while (bytes > 0) {
> -		while ((bytes > 0) && (index < sb->s_blocksize)) {
> -			value = ptr[index];
> -			accum += udf_bitmap_lookup[value & 0x0f];
> -			accum += udf_bitmap_lookup[value >> 4];
> -			index++;
> -			bytes--;
> -		}
> +		u32 cur_bytes = min_t(u32, bytes, sb->s_blocksize - index);
> +		accum += bitmap_weight((const unsigned long *)(ptr + index),
> +					cur_bytes * 8);
> +		bytes -= cur_bytes;
>  		if (bytes) {
>  			brelse(bh);
>  			newblock = udf_get_lb_pblock(sb, loc, ++block);
> -- 
> 1.5.3.7
> 
-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR


\
 
 \ /
  Last update: 2008-02-04 20:17    [from the cache]
©2003-2008