@@ -5834,8 +5834,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5834
5834
struct walk_control * wc ;
5835
5835
struct btrfs_key key ;
5836
5836
const u64 rootid = btrfs_root_id (root );
5837
- int err = 0 ;
5838
- int ret ;
5837
+ int ret = 0 ;
5839
5838
int level ;
5840
5839
bool root_dropped = false;
5841
5840
bool unfinished_drop = false;
@@ -5844,14 +5843,14 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5844
5843
5845
5844
path = btrfs_alloc_path ();
5846
5845
if (!path ) {
5847
- err = - ENOMEM ;
5846
+ ret = - ENOMEM ;
5848
5847
goto out ;
5849
5848
}
5850
5849
5851
5850
wc = kzalloc (sizeof (* wc ), GFP_NOFS );
5852
5851
if (!wc ) {
5853
5852
btrfs_free_path (path );
5854
- err = - ENOMEM ;
5853
+ ret = - ENOMEM ;
5855
5854
goto out ;
5856
5855
}
5857
5856
@@ -5864,12 +5863,12 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5864
5863
else
5865
5864
trans = btrfs_start_transaction (tree_root , 0 );
5866
5865
if (IS_ERR (trans )) {
5867
- err = PTR_ERR (trans );
5866
+ ret = PTR_ERR (trans );
5868
5867
goto out_free ;
5869
5868
}
5870
5869
5871
- err = btrfs_run_delayed_items (trans );
5872
- if (err )
5870
+ ret = btrfs_run_delayed_items (trans );
5871
+ if (ret )
5873
5872
goto out_end_trans ;
5874
5873
5875
5874
/*
@@ -5900,11 +5899,11 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5900
5899
path -> lowest_level = level ;
5901
5900
ret = btrfs_search_slot (NULL , root , & key , path , 0 , 0 );
5902
5901
path -> lowest_level = 0 ;
5903
- if (ret < 0 ) {
5904
- err = ret ;
5902
+ if (ret < 0 )
5905
5903
goto out_end_trans ;
5906
- }
5904
+
5907
5905
WARN_ON (ret > 0 );
5906
+ ret = 0 ;
5908
5907
5909
5908
/*
5910
5909
* unlock our path, this is safe because only this
@@ -5917,14 +5916,17 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5917
5916
btrfs_tree_lock (path -> nodes [level ]);
5918
5917
path -> locks [level ] = BTRFS_WRITE_LOCK ;
5919
5918
5919
+ /*
5920
+ * btrfs_lookup_extent_info() returns 0 for success,
5921
+ * or < 0 for error.
5922
+ */
5920
5923
ret = btrfs_lookup_extent_info (trans , fs_info ,
5921
5924
path -> nodes [level ]-> start ,
5922
5925
level , 1 , & wc -> refs [level ],
5923
5926
& wc -> flags [level ], NULL );
5924
- if (ret < 0 ) {
5925
- err = ret ;
5927
+ if (ret < 0 )
5926
5928
goto out_end_trans ;
5927
- }
5929
+
5928
5930
BUG_ON (wc -> refs [level ] == 0 );
5929
5931
5930
5932
if (level == btrfs_root_drop_level (root_item ))
@@ -5950,19 +5952,18 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5950
5952
ret = walk_down_tree (trans , root , path , wc );
5951
5953
if (ret < 0 ) {
5952
5954
btrfs_abort_transaction (trans , ret );
5953
- err = ret ;
5954
5955
break ;
5955
5956
}
5956
5957
5957
5958
ret = walk_up_tree (trans , root , path , wc , BTRFS_MAX_LEVEL );
5958
5959
if (ret < 0 ) {
5959
5960
btrfs_abort_transaction (trans , ret );
5960
- err = ret ;
5961
5961
break ;
5962
5962
}
5963
5963
5964
5964
if (ret > 0 ) {
5965
5965
BUG_ON (wc -> stage != DROP_REFERENCE );
5966
+ ret = 0 ;
5966
5967
break ;
5967
5968
}
5968
5969
@@ -5984,7 +5985,6 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5984
5985
root_item );
5985
5986
if (ret ) {
5986
5987
btrfs_abort_transaction (trans , ret );
5987
- err = ret ;
5988
5988
goto out_end_trans ;
5989
5989
}
5990
5990
@@ -5995,7 +5995,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
5995
5995
if (!for_reloc && btrfs_need_cleaner_sleep (fs_info )) {
5996
5996
btrfs_debug (fs_info ,
5997
5997
"drop snapshot early exit" );
5998
- err = - EAGAIN ;
5998
+ ret = - EAGAIN ;
5999
5999
goto out_free ;
6000
6000
}
6001
6001
@@ -6009,19 +6009,18 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
6009
6009
else
6010
6010
trans = btrfs_start_transaction (tree_root , 0 );
6011
6011
if (IS_ERR (trans )) {
6012
- err = PTR_ERR (trans );
6012
+ ret = PTR_ERR (trans );
6013
6013
goto out_free ;
6014
6014
}
6015
6015
}
6016
6016
}
6017
6017
btrfs_release_path (path );
6018
- if (err )
6018
+ if (ret )
6019
6019
goto out_end_trans ;
6020
6020
6021
6021
ret = btrfs_del_root (trans , & root -> root_key );
6022
6022
if (ret ) {
6023
6023
btrfs_abort_transaction (trans , ret );
6024
- err = ret ;
6025
6024
goto out_end_trans ;
6026
6025
}
6027
6026
@@ -6030,10 +6029,11 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
6030
6029
NULL , NULL );
6031
6030
if (ret < 0 ) {
6032
6031
btrfs_abort_transaction (trans , ret );
6033
- err = ret ;
6034
6032
goto out_end_trans ;
6035
6033
} else if (ret > 0 ) {
6036
- /* if we fail to delete the orphan item this time
6034
+ ret = 0 ;
6035
+ /*
6036
+ * If we fail to delete the orphan item this time
6037
6037
* around, it'll get picked up the next time.
6038
6038
*
6039
6039
* The most common failure here is just -ENOENT.
@@ -6064,18 +6064,19 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
6064
6064
kfree (wc );
6065
6065
btrfs_free_path (path );
6066
6066
out :
6067
- if (!err && root_dropped ) {
6067
+ if (!ret && root_dropped ) {
6068
6068
ret = btrfs_qgroup_cleanup_dropped_subvolume (fs_info , rootid );
6069
6069
if (ret < 0 )
6070
6070
btrfs_warn_rl (fs_info ,
6071
6071
"failed to cleanup qgroup 0/%llu: %d" ,
6072
6072
rootid , ret );
6073
+ ret = 0 ;
6073
6074
}
6074
6075
/*
6075
6076
* We were an unfinished drop root, check to see if there are any
6076
6077
* pending, and if not clear and wake up any waiters.
6077
6078
*/
6078
- if (!err && unfinished_drop )
6079
+ if (!ret && unfinished_drop )
6079
6080
btrfs_maybe_wake_unfinished_drop (fs_info );
6080
6081
6081
6082
/*
@@ -6087,7 +6088,7 @@ int btrfs_drop_snapshot(struct btrfs_root *root, int update_ref, int for_reloc)
6087
6088
*/
6088
6089
if (!for_reloc && !root_dropped )
6089
6090
btrfs_add_dead_root (root );
6090
- return err ;
6091
+ return ret ;
6091
6092
}
6092
6093
6093
6094
/*
0 commit comments