From: zhangjs <zach...@baishancloud.com>

If the task is unplugged when called, the inode_readahead_blks may not be 
merged, 
these will cause small pieces of io, It should be plugged.

Signed-off-by: zhangjs <zach...@baishancloud.com>
---
 fs/ext4/inode.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index c7f77c6..8fe046b 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -4570,6 +4570,7 @@ static int __ext4_get_inode_loc(struct inode *inode,
        struct buffer_head      *bh;
        struct super_block      *sb = inode->i_sb;
        ext4_fsblk_t            block;
+       struct blk_plug         plug;
        int                     inodes_per_block, inode_offset;
 
        iloc->bh = NULL;
@@ -4654,6 +4655,8 @@ static int __ext4_get_inode_loc(struct inode *inode,
                }
 
 make_io:
+               blk_start_plug(&plug);
+
                /*
                 * If we need to do any I/O, try to pre-readahead extra
                 * blocks from the inode table.
@@ -4688,6 +4691,9 @@ static int __ext4_get_inode_loc(struct inode *inode,
                get_bh(bh);
                bh->b_end_io = end_buffer_read_sync;
                submit_bh(REQ_OP_READ, REQ_META | REQ_PRIO, bh);
+
+               blk_finish_plug(&plug);
+
                wait_on_buffer(bh);
                if (!buffer_uptodate(bh)) {
                        EXT4_ERROR_INODE_BLOCK(inode, block,
-- 
1.8.3.1

Reply via email to