aboutsummaryrefslogtreecommitdiffstats
path: root/fs/udf/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/udf/super.c')
-rw-r--r--fs/udf/super.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 2666e5bc69ff..be0aa424b8f1 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -55,6 +55,7 @@
55#include <linux/errno.h> 55#include <linux/errno.h>
56#include <linux/mount.h> 56#include <linux/mount.h>
57#include <linux/seq_file.h> 57#include <linux/seq_file.h>
58#include <linux/bitmap.h>
58#include <asm/byteorder.h> 59#include <asm/byteorder.h>
59 60
60#include "udf_sb.h" 61#include "udf_sb.h"
@@ -1958,10 +1959,6 @@ static int udf_statfs(struct dentry *dentry, struct kstatfs *buf)
1958 return 0; 1959 return 0;
1959} 1960}
1960 1961
1961static unsigned char udf_bitmap_lookup[16] = {
1962 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
1963};
1964
1965static unsigned int udf_count_free_bitmap(struct super_block *sb, 1962static unsigned int udf_count_free_bitmap(struct super_block *sb,
1966 struct udf_bitmap *bitmap) 1963 struct udf_bitmap *bitmap)
1967{ 1964{
@@ -1971,7 +1968,6 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
1971 int block = 0, newblock; 1968 int block = 0, newblock;
1972 kernel_lb_addr loc; 1969 kernel_lb_addr loc;
1973 uint32_t bytes; 1970 uint32_t bytes;
1974 uint8_t value;
1975 uint8_t *ptr; 1971 uint8_t *ptr;
1976 uint16_t ident; 1972 uint16_t ident;
1977 struct spaceBitmapDesc *bm; 1973 struct spaceBitmapDesc *bm;
@@ -1997,13 +1993,10 @@ static unsigned int udf_count_free_bitmap(struct super_block *sb,
1997 ptr = (uint8_t *)bh->b_data; 1993 ptr = (uint8_t *)bh->b_data;
1998 1994
1999 while (bytes > 0) { 1995 while (bytes > 0) {
2000 while ((bytes > 0) && (index < sb->s_blocksize)) { 1996 u32 cur_bytes = min_t(u32, bytes, sb->s_blocksize - index);
2001 value = ptr[index]; 1997 accum += bitmap_weight((const unsigned long *)(ptr + index),
2002 accum += udf_bitmap_lookup[value & 0x0f]; 1998 cur_bytes * 8);
2003 accum += udf_bitmap_lookup[value >> 4]; 1999 bytes -= cur_bytes;
2004 index++;
2005 bytes--;
2006 }
2007 if (bytes) { 2000 if (bytes) {
2008 brelse(bh); 2001 brelse(bh);
2009 newblock = udf_get_lb_pblock(sb, loc, ++block); 2002 newblock = udf_get_lb_pblock(sb, loc, ++block);