In addition to ext4_find_extent reading extent block return -EIO, ext4_handle_error will be called when there is a problem that may cause file system inconsistency in the ext4_ext_insert_extent function. So call the ext4_handle_error function when the ext4_find_extent read fails,and make the filesystem read-only when mount for `errors=remount-ro`, and Check whether the journal is aborted in the ext4_split_extent_at function. Signed-off-by: zhanchengbin <zhanchengbin1@xxxxxxxxxx> Signed-off-by: Zhang Yi <yi.zhang@xxxxxxxxxx> --- fs/ext4/extents.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 3559ea6b0781..3798b2a8e550 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -935,6 +935,7 @@ ext4_find_extent(struct inode *inode, ext4_lblk_t block, bh = read_extent_tree_block(inode, path[ppos].p_idx, --i, flags); if (IS_ERR(bh)) { + EXT4_ERROR_INODE(inode, "IO error reading extent block"); ret = PTR_ERR(bh); goto err; } @@ -3251,7 +3252,7 @@ static int ext4_split_extent_at(handle_t *handle, ext4_ext_mark_unwritten(ex2); err = ext4_ext_insert_extent(handle, inode, ppath, &newex, flags); - if (err != -ENOSPC && err != -EDQUOT && err != -ENOMEM) + if (err && is_handle_aborted(handle)) goto out; if (EXT4_EXT_MAY_ZEROOUT & split_flag) { -- 2.31.1