On Tue 10-01-23 21:34:07, zhanchengbin wrote: > 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> Thanks for the patch! Some comments below. > 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"); So this is fine... > 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; But this doesn't look right. Firstly, if err == 0, it will wrongly go to the zero-out part although we should exit. Secondly, is_handle_aborted() is not going to work for nojournal mode. So I don't think we can simplify the condition like this. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR