On Wed 10-07-24 12:06:49, libaokun@xxxxxxxxxxxxxxx wrote: > From: Baokun Li <libaokun1@xxxxxxxxxx> > > The use of path and ppath is now very confusing, so to make the code more > readable, pass path between functions uniformly, and get rid of ppath. > > To get rid of the ppath in ext4_split_convert_extents(), the following is > done here: > > * Its caller needs to update ppath if it uses ppath. > > No functional changes. > > Signed-off-by: Baokun Li <libaokun1@xxxxxxxxxx> Looks good. Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/ext4/extents.c | 65 ++++++++++++++++++++++++----------------------- > 1 file changed, 33 insertions(+), 32 deletions(-) > > diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c > index 2a4f6c89858c..a41cbb8c4475 100644 > --- a/fs/ext4/extents.c > +++ b/fs/ext4/extents.c > @@ -3699,21 +3699,21 @@ static int ext4_ext_convert_to_initialized(handle_t *handle, > * being filled will be convert to initialized by the end_io callback function > * via ext4_convert_unwritten_extents(). > * > - * Returns the size of unwritten extent to be written on success. > + * The size of unwritten extent to be written is passed to the caller via the > + * allocated pointer. Return an extent path pointer on success, or an error > + * pointer on failure. > */ > -static int ext4_split_convert_extents(handle_t *handle, > +static struct ext4_ext_path *ext4_split_convert_extents(handle_t *handle, > struct inode *inode, > struct ext4_map_blocks *map, > - struct ext4_ext_path **ppath, > - int flags) > + struct ext4_ext_path *path, > + int flags, unsigned int *allocated) > { > - struct ext4_ext_path *path = *ppath; > ext4_lblk_t eof_block; > ext4_lblk_t ee_block; > struct ext4_extent *ex; > unsigned int ee_len; > int split_flag = 0, depth; > - unsigned int allocated = 0; > > ext_debug(inode, "logical block %llu, max_blocks %u\n", > (unsigned long long)map->m_lblk, map->m_len); > @@ -3741,14 +3741,8 @@ static int ext4_split_convert_extents(handle_t *handle, > split_flag |= (EXT4_EXT_MARK_UNWRIT2 | EXT4_EXT_DATA_VALID2); > } > flags |= EXT4_GET_BLOCKS_PRE_IO; > - path = ext4_split_extent(handle, inode, path, map, split_flag, flags, > - &allocated); > - if (IS_ERR(path)) { > - *ppath = NULL; > - return PTR_ERR(path); > - } > - *ppath = path; > - return allocated; > + return ext4_split_extent(handle, inode, path, map, split_flag, flags, > + allocated); > } > > static int ext4_convert_unwritten_extents_endio(handle_t *handle, > @@ -3784,11 +3778,14 @@ static int ext4_convert_unwritten_extents_endio(handle_t *handle, > inode->i_ino, (unsigned long long)ee_block, ee_len, > (unsigned long long)map->m_lblk, map->m_len); > #endif > - err = ext4_split_convert_extents(handle, inode, map, ppath, > - EXT4_GET_BLOCKS_CONVERT); > - if (err < 0) > - return err; > - path = ext4_find_extent(inode, map->m_lblk, *ppath, 0); > + path = ext4_split_convert_extents(handle, inode, map, path, > + EXT4_GET_BLOCKS_CONVERT, NULL); > + if (IS_ERR(path)) { > + *ppath = NULL; > + return PTR_ERR(path); > + } > + > + path = ext4_find_extent(inode, map->m_lblk, path, 0); > if (IS_ERR(path)) { > *ppath = NULL; > return PTR_ERR(path); > @@ -3845,11 +3842,14 @@ convert_initialized_extent(handle_t *handle, struct inode *inode, > (unsigned long long)ee_block, ee_len); > > if (ee_block != map->m_lblk || ee_len > map->m_len) { > - err = ext4_split_convert_extents(handle, inode, map, ppath, > - EXT4_GET_BLOCKS_CONVERT_UNWRITTEN); > - if (err < 0) > - return err; > - path = ext4_find_extent(inode, map->m_lblk, *ppath, 0); > + path = ext4_split_convert_extents(handle, inode, map, path, > + EXT4_GET_BLOCKS_CONVERT_UNWRITTEN, NULL); > + if (IS_ERR(path)) { > + *ppath = NULL; > + return PTR_ERR(path); > + } > + > + path = ext4_find_extent(inode, map->m_lblk, path, 0); > if (IS_ERR(path)) { > *ppath = NULL; > return PTR_ERR(path); > @@ -3915,19 +3915,20 @@ ext4_ext_handle_unwritten_extents(handle_t *handle, struct inode *inode, > > /* get_block() before submitting IO, split the extent */ > if (flags & EXT4_GET_BLOCKS_PRE_IO) { > - ret = ext4_split_convert_extents(handle, inode, map, ppath, > - flags | EXT4_GET_BLOCKS_CONVERT); > - if (ret < 0) { > - err = ret; > + *ppath = ext4_split_convert_extents(handle, inode, map, *ppath, > + flags | EXT4_GET_BLOCKS_CONVERT, &allocated); > + if (IS_ERR(*ppath)) { > + err = PTR_ERR(*ppath); > + *ppath = NULL; > goto out2; > } > /* > - * shouldn't get a 0 return when splitting an extent unless > + * shouldn't get a 0 allocated when splitting an extent unless > * m_len is 0 (bug) or extent has been corrupted > */ > - if (unlikely(ret == 0)) { > + if (unlikely(allocated == 0)) { > EXT4_ERROR_INODE(inode, > - "unexpected ret == 0, m_len = %u", > + "unexpected allocated == 0, m_len = %u", > map->m_len); > err = -EFSCORRUPTED; > goto out2; > @@ -3988,9 +3989,9 @@ ext4_ext_handle_unwritten_extents(handle_t *handle, struct inode *inode, > err = -EFSCORRUPTED; > goto out2; > } > + allocated = ret; > > out: > - allocated = ret; > map->m_flags |= EXT4_MAP_NEW; > map_out: > map->m_flags |= EXT4_MAP_MAPPED; > -- > 2.39.2 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR