diff options
author | 2014-09-12 18:43:54 +0800 | |
---|---|---|
committer | 2014-09-17 13:38:50 -0700 | |
commit | 23ea8e5a07673127d05cb5cf6f9914d7a53e0847 (patch) | |
tree | 58199f4b68c72a1a6c4d0be4cf6ab917ecdcb070 /fs/btrfs/file-item.c | |
parent | Btrfs: modify rw_devices counter under chunk_mutex context (diff) | |
download | linux-23ea8e5a07673127d05cb5cf6f9914d7a53e0847.tar.gz linux-23ea8e5a07673127d05cb5cf6f9914d7a53e0847.tar.bz2 linux-23ea8e5a07673127d05cb5cf6f9914d7a53e0847.zip |
Btrfs: load checksum data once when submitting a direct read io
The current code would load checksum data for several times when we split
a whole direct read io because of the limit of the raid stripe, it would
make us search the csum tree for several times. In fact, it just wasted time,
and made the contention of the csum tree root be more serious. This patch
improves this problem by loading the data at once.
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
Diffstat (limited to 'fs/btrfs/file-item.c')
-rw-r--r-- | fs/btrfs/file-item.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index 6e6262eca8b7..783a94355efd 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -299,19 +299,9 @@ int btrfs_lookup_bio_sums(struct btrfs_root *root, struct inode *inode, } int btrfs_lookup_bio_sums_dio(struct btrfs_root *root, struct inode *inode, - struct btrfs_dio_private *dip, struct bio *bio, - u64 offset) + struct bio *bio, u64 offset) { - int len = (bio->bi_iter.bi_sector << 9) - dip->disk_bytenr; - u16 csum_size = btrfs_super_csum_size(root->fs_info->super_copy); - int ret; - - len >>= inode->i_sb->s_blocksize_bits; - len *= csum_size; - - ret = __btrfs_lookup_bio_sums(root, inode, bio, offset, - (u32 *)(dip->csum + len), 1); - return ret; + return __btrfs_lookup_bio_sums(root, inode, bio, offset, NULL, 1); } int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end, |