diff options
author | Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz> | 2013-07-04 19:04:01 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-04 20:22:46 +0200 |
commit | 275f495dbe34300d793466a7d96c70f83fbae1bc (patch) | |
tree | 75785e0623188c52360f845419354b3b7cd67051 /fs/hpfs/super.c | |
parent | hpfs: use mpage (diff) | |
download | linux-275f495dbe34300d793466a7d96c70f83fbae1bc.tar.xz linux-275f495dbe34300d793466a7d96c70f83fbae1bc.zip |
hpfs: implement prefetch to improve performance
This patch implements prefetch to improve performance. It helps mostly
when scanning the bitmaps to calculate free space.
Signed-off-by: Mikulas Patocka <mpatocka@artax.karlin.mff.cuni.cz>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to '')
-rw-r--r-- | fs/hpfs/super.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c index 962e90c37aec..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) unsigned long *bits; unsigned count; - bits = hpfs_map_4sectors(s, secno, &qbh, 4); + bits = hpfs_map_4sectors(s, secno, &qbh, 0); if (!bits) return 0; count = bitmap_weight(bits, 2048 * BITS_PER_BYTE); @@ -134,8 +134,13 @@ static unsigned count_bitmaps(struct super_block *s) unsigned n, count, n_bands; n_bands = (hpfs_sb(s)->sb_fs_size + 0x3fff) >> 14; count = 0; - for (n = 0; n < n_bands; n++) + for (n = 0; n < COUNT_RD_AHEAD; n++) { + hpfs_prefetch_bitmap(s, n); + } + for (n = 0; n < n_bands; n++) { + hpfs_prefetch_bitmap(s, n + COUNT_RD_AHEAD); count += hpfs_count_one_bitmap(s, le32_to_cpu(hpfs_sb(s)->sb_bmp_dir[n])); + } return count; } |