diff options
Diffstat (limited to 'fs/udf')
| -rw-r--r-- | 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 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 | ||
| 1961 | static 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 | |||
| 1965 | static unsigned int udf_count_free_bitmap(struct super_block *sb, | 1962 | static 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); |
