diff options
author | Tahsin Erdogan <tahsin@google.com> | 2017-08-06 06:07:01 +0200 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-08-06 06:07:01 +0200 |
commit | 9699d4f91d9bd2f70dcc37afe3c9f18145ab2dba (patch) | |
tree | 8fc510c6e2da691b84598b8b2cb13aeb92d00288 /fs/ext4/ext4.h | |
parent | ext4: inplace xattr block update fails to deduplicate blocks (diff) | |
download | linux-9699d4f91d9bd2f70dcc37afe3c9f18145ab2dba.tar.xz linux-9699d4f91d9bd2f70dcc37afe3c9f18145ab2dba.zip |
ext4: make xattr inode reads faster
ext4_xattr_inode_read() currently reads each block sequentially while
waiting for io operation to complete before moving on to the next
block. This prevents request merging in block layer.
Add a ext4_bread_batch() function that starts reads for all blocks
then optionally waits for them to complete. A similar logic is used
in ext4_find_entry(), so update that code to use the new function.
Signed-off-by: Tahsin Erdogan <tahsin@google.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4.h')
-rw-r--r-- | fs/ext4/ext4.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index d50229e92c55..a2bb7d2870e4 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -2461,6 +2461,8 @@ extern void ext4_process_freed_data(struct super_block *sb, tid_t commit_tid); int ext4_inode_is_fast_symlink(struct inode *inode); struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int); struct buffer_head *ext4_bread(handle_t *, struct inode *, ext4_lblk_t, int); +int ext4_bread_batch(struct inode *inode, ext4_lblk_t block, int bh_count, + bool wait, struct buffer_head **bhs); int ext4_get_block_unwritten(struct inode *inode, sector_t iblock, struct buffer_head *bh_result, int create); int ext4_get_block(struct inode *inode, sector_t iblock, |