OSDN Git Service

ext4: move inode eio simulation behind io completeion
authorZhang Yi <yi.zhang@huawei.com>
Thu, 26 Aug 2021 13:04:07 +0000 (21:04 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 31 Aug 2021 03:36:51 +0000 (23:36 -0400)
No EIO simulation is required if the buffer is uptodate, so move the
simulation behind read bio completeion just like inode/block bitmap
simulation does.

Signed-off-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20210826130412.3921207-2-yi.zhang@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inode.c

index 8fc0dad..532443f 100644 (file)
@@ -4337,8 +4337,6 @@ static int __ext4_get_inode_loc(struct super_block *sb, unsigned long ino,
        bh = sb_getblk(sb, block);
        if (unlikely(!bh))
                return -ENOMEM;
-       if (ext4_simulate_fail(sb, EXT4_SIM_INODE_EIO))
-               goto simulate_eio;
        if (!buffer_uptodate(bh)) {
                lock_buffer(bh);
 
@@ -4425,8 +4423,8 @@ make_io:
                ext4_read_bh_nowait(bh, REQ_META | REQ_PRIO, NULL);
                blk_finish_plug(&plug);
                wait_on_buffer(bh);
+               ext4_simulate_fail_bh(sb, bh, EXT4_SIM_INODE_EIO);
                if (!buffer_uptodate(bh)) {
-               simulate_eio:
                        if (ret_block)
                                *ret_block = block;
                        brelse(bh);