@@ -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 *
332332ext4_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
354347static 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