Skip to content

Commit f07be1c

Browse files
LiBaokun96tytso
authored andcommitted
ext4: get rid of ppath in ext4_force_split_extent_at()
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_force_split_extent_at(), the following is done here: * Free the extents path when an error is encountered. No functional changes. Signed-off-by: Baokun Li <[email protected]> Reviewed-by: Jan Kara <[email protected]> Reviewed-by: Ojaswin Mujoo <[email protected]> Tested-by: Ojaswin Mujoo <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Theodore Ts'o <[email protected]>
1 parent 1de82b1 commit f07be1c

File tree

1 file changed

+38
-31
lines changed

1 file changed

+38
-31
lines changed

fs/ext4/extents.c

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -328,27 +328,20 @@ static inline int ext4_ext_space_root_idx(struct inode *inode, int check)
328328
return size;
329329
}
330330

331-
static inline int
331+
static inline struct ext4_ext_path *
332332
ext4_force_split_extent_at(handle_t *handle, struct inode *inode,
333-
struct ext4_ext_path **ppath, ext4_lblk_t lblk,
333+
struct ext4_ext_path *path, ext4_lblk_t lblk,
334334
int nofail)
335335
{
336-
struct ext4_ext_path *path = *ppath;
337336
int unwritten = ext4_ext_is_unwritten(path[path->p_depth].p_ext);
338337
int flags = EXT4_EX_NOCACHE | EXT4_GET_BLOCKS_PRE_IO;
339338

340339
if (nofail)
341340
flags |= EXT4_GET_BLOCKS_METADATA_NOFAIL | EXT4_EX_NOFAIL;
342341

343-
path = ext4_split_extent_at(handle, inode, path, lblk, unwritten ?
342+
return ext4_split_extent_at(handle, inode, path, lblk, unwritten ?
344343
EXT4_EXT_MARK_UNWRIT1|EXT4_EXT_MARK_UNWRIT2 : 0,
345344
flags);
346-
if (IS_ERR(path)) {
347-
*ppath = NULL;
348-
return PTR_ERR(path);
349-
}
350-
*ppath = path;
351-
return 0;
352345
}
353346

354347
static int
@@ -2907,11 +2900,12 @@ int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
29072900
* fail removing space due to ENOSPC so try to use
29082901
* reserved block if that happens.
29092902
*/
2910-
err = ext4_force_split_extent_at(handle, inode, &path,
2911-
end + 1, 1);
2912-
if (err < 0)
2903+
path = ext4_force_split_extent_at(handle, inode, path,
2904+
end + 1, 1);
2905+
if (IS_ERR(path)) {
2906+
err = PTR_ERR(path);
29132907
goto out;
2914-
2908+
}
29152909
} else if (sbi->s_cluster_ratio > 1 && end >= ex_end &&
29162910
partial.state == initial) {
29172911
/*
@@ -5728,17 +5722,21 @@ ext4_swap_extents(handle_t *handle, struct inode *inode1,
57285722
/* Prepare left boundary */
57295723
if (e1_blk < lblk1) {
57305724
split = 1;
5731-
*erp = ext4_force_split_extent_at(handle, inode1,
5732-
&path1, lblk1, 0);
5733-
if (unlikely(*erp))
5725+
path1 = ext4_force_split_extent_at(handle, inode1,
5726+
path1, lblk1, 0);
5727+
if (IS_ERR(path1)) {
5728+
*erp = PTR_ERR(path1);
57345729
goto finish;
5730+
}
57355731
}
57365732
if (e2_blk < lblk2) {
57375733
split = 1;
5738-
*erp = ext4_force_split_extent_at(handle, inode2,
5739-
&path2, lblk2, 0);
5740-
if (unlikely(*erp))
5734+
path2 = ext4_force_split_extent_at(handle, inode2,
5735+
path2, lblk2, 0);
5736+
if (IS_ERR(path2)) {
5737+
*erp = PTR_ERR(path2);
57415738
goto finish;
5739+
}
57425740
}
57435741
/* ext4_split_extent_at() may result in leaf extent split,
57445742
* path must to be revalidated. */
@@ -5754,17 +5752,21 @@ ext4_swap_extents(handle_t *handle, struct inode *inode1,
57545752

57555753
if (len != e1_len) {
57565754
split = 1;
5757-
*erp = ext4_force_split_extent_at(handle, inode1,
5758-
&path1, lblk1 + len, 0);
5759-
if (unlikely(*erp))
5755+
path1 = ext4_force_split_extent_at(handle, inode1,
5756+
path1, lblk1 + len, 0);
5757+
if (IS_ERR(path1)) {
5758+
*erp = PTR_ERR(path1);
57605759
goto finish;
5760+
}
57615761
}
57625762
if (len != e2_len) {
57635763
split = 1;
5764-
*erp = ext4_force_split_extent_at(handle, inode2,
5765-
&path2, lblk2 + len, 0);
5766-
if (*erp)
5764+
path2 = ext4_force_split_extent_at(handle, inode2,
5765+
path2, lblk2 + len, 0);
5766+
if (IS_ERR(path2)) {
5767+
*erp = PTR_ERR(path2);
57675768
goto finish;
5769+
}
57685770
}
57695771
/* ext4_split_extent_at() may result in leaf extent split,
57705772
* path must to be revalidated. */
@@ -5930,24 +5932,29 @@ int ext4_ext_replay_update_ex(struct inode *inode, ext4_lblk_t start,
59305932
ext4_ext_get_actual_len(ex) != len) {
59315933
/* We need to split this extent to match our extent first */
59325934
down_write(&EXT4_I(inode)->i_data_sem);
5933-
ret = ext4_force_split_extent_at(NULL, inode, &path, start, 1);
5935+
path = ext4_force_split_extent_at(NULL, inode, path, start, 1);
59345936
up_write(&EXT4_I(inode)->i_data_sem);
5935-
if (ret)
5937+
if (IS_ERR(path)) {
5938+
ret = PTR_ERR(path);
59365939
goto out;
5940+
}
59375941

59385942
path = ext4_find_extent(inode, start, path, 0);
59395943
if (IS_ERR(path))
59405944
return PTR_ERR(path);
5945+
59415946
ex = path[path->p_depth].p_ext;
59425947
WARN_ON(le32_to_cpu(ex->ee_block) != start);
59435948

59445949
if (ext4_ext_get_actual_len(ex) != len) {
59455950
down_write(&EXT4_I(inode)->i_data_sem);
5946-
ret = ext4_force_split_extent_at(NULL, inode, &path,
5947-
start + len, 1);
5951+
path = ext4_force_split_extent_at(NULL, inode, path,
5952+
start + len, 1);
59485953
up_write(&EXT4_I(inode)->i_data_sem);
5949-
if (ret)
5954+
if (IS_ERR(path)) {
5955+
ret = PTR_ERR(path);
59505956
goto out;
5957+
}
59515958

59525959
path = ext4_find_extent(inode, start, path, 0);
59535960
if (IS_ERR(path))

0 commit comments

Comments
 (0)