diff options
Diffstat (limited to 'fs/hpfs/super.c')
-rw-r--r-- | fs/hpfs/super.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index a0617e706957..4334cda8dba1 100644 --- a/fs/hpfs/super.c +++ b/fs/hpfs/super.c | |||
@@ -121,7 +121,7 @@ unsigned hpfs_count_one_bitmap(struct super_block *s, secno secno) | |||
121 | unsigned long *bits; | 121 | unsigned long *bits; |
122 | unsigned count; | 122 | unsigned count; |
123 | 123 | ||
124 | bits = hpfs_map_4sectors(s, secno, &qbh, 4); | 124 | bits = hpfs_map_4sectors(s, secno, &qbh, 0); |
125 | if (!bits) | 125 | if (!bits) |
126 | return 0; | 126 | return 0; |
127 | count = bitmap_weight(bits, 2048 * BITS_PER_BYTE); | 127 | count = bitmap_weight(bits, 2048 * BITS_PER_BYTE); |
@@ -134,8 +134,13 @@ static unsigned count_bitmaps(struct super_block *s) | |||
134 | unsigned n, count, n_bands; | 134 | unsigned n, count, n_bands; |
135 | n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14; | 135 | n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14; |
136 | count = 0; | 136 | count = 0; |
137 | for (n = 0; n < n_bands; n++) | 137 | for (n = 0; n < COUNT_RD_AHEAD; n++) { |
138 | hpfs_prefetch_bitmap(s, n); | ||
139 | } | ||
140 | for (n = 0; n < n_bands; n++) { | ||
141 | hpfs_prefetch_bitmap(s, n + COUNT_RD_AHEAD); | ||
138 | count += hpfs_count_one_bitmap(s, le32_to_cpu(hpfs_sb(s)->sb_bmp_dir[n])); | 142 | count += hpfs_count_one_bitmap(s, le32_to_cpu(hpfs_sb(s)->sb_bmp_dir[n])); |
143 | } | ||
139 | return count; | 144 | return count; |
140 | } | 145 | } |
141 | 146 | ||
@@ -558,7 +563,13 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent) | |||
558 | sbi->sb_cp_table = NULL; | 563 | sbi->sb_cp_table = NULL; |
559 | sbi->sb_c_bitmap = -1; | 564 | sbi->sb_c_bitmap = -1; |
560 | sbi->sb_max_fwd_alloc = 0xffffff; | 565 | sbi->sb_max_fwd_alloc = 0xffffff; |
561 | 566 | ||
567 | if (sbi->sb_fs_size >= 0x80000000) { | ||
568 | hpfs_error(s, "invalid size in superblock: %08x", | ||
569 | (unsigned)sbi->sb_fs_size); | ||
570 | goto bail4; | ||
571 | } | ||
572 | |||
562 | /* Load bitmap directory */ | 573 | /* Load bitmap directory */ |
563 | if (!(sbi->sb_bmp_dir = hpfs_load_bitmap_directory(s, le32_to_cpu(superblock->bitmaps)))) | 574 | if (!(sbi->sb_bmp_dir = hpfs_load_bitmap_directory(s, le32_to_cpu(superblock->bitmaps)))) |
564 | goto bail4; | 575 | goto bail4; |