mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +02:00 
			
		
		
		
	btrfs: push lookup_info into struct walk_control
Instead of using a flag we're passing around everywhere, add a field to walk_control that we're already passing around everywhere and use that instead. Signed-off-by: Josef Bacik <josef@toxicpanda.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									3fdf5798fa
								
							
						
					
					
						commit
						7fcee18da4
					
				
					 1 changed files with 12 additions and 10 deletions
				
			
		|  | @ -5220,6 +5220,8 @@ struct walk_control { | ||||||
| 	int reada_slot; | 	int reada_slot; | ||||||
| 	int reada_count; | 	int reada_count; | ||||||
| 	int restarted; | 	int restarted; | ||||||
|  | 	/* Indicate that extent info needs to be looked up when walking the tree. */ | ||||||
|  | 	int lookup_info; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #define DROP_REFERENCE	1 | #define DROP_REFERENCE	1 | ||||||
|  | @ -5316,7 +5318,7 @@ static noinline void reada_walk_down(struct btrfs_trans_handle *trans, | ||||||
| static noinline int walk_down_proc(struct btrfs_trans_handle *trans, | static noinline int walk_down_proc(struct btrfs_trans_handle *trans, | ||||||
| 				   struct btrfs_root *root, | 				   struct btrfs_root *root, | ||||||
| 				   struct btrfs_path *path, | 				   struct btrfs_path *path, | ||||||
| 				   struct walk_control *wc, int lookup_info) | 				   struct walk_control *wc) | ||||||
| { | { | ||||||
| 	struct btrfs_fs_info *fs_info = root->fs_info; | 	struct btrfs_fs_info *fs_info = root->fs_info; | ||||||
| 	int level = wc->level; | 	int level = wc->level; | ||||||
|  | @ -5331,7 +5333,7 @@ static noinline int walk_down_proc(struct btrfs_trans_handle *trans, | ||||||
| 	 * when reference count of tree block is 1, it won't increase | 	 * when reference count of tree block is 1, it won't increase | ||||||
| 	 * again. once full backref flag is set, we never clear it. | 	 * again. once full backref flag is set, we never clear it. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (lookup_info && | 	if (wc->lookup_info && | ||||||
| 	    ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || | 	    ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || | ||||||
| 	     (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { | 	     (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { | ||||||
| 		BUG_ON(!path->locks[level]); | 		BUG_ON(!path->locks[level]); | ||||||
|  | @ -5423,7 +5425,7 @@ static int check_ref_exists(struct btrfs_trans_handle *trans, | ||||||
| static noinline int do_walk_down(struct btrfs_trans_handle *trans, | static noinline int do_walk_down(struct btrfs_trans_handle *trans, | ||||||
| 				 struct btrfs_root *root, | 				 struct btrfs_root *root, | ||||||
| 				 struct btrfs_path *path, | 				 struct btrfs_path *path, | ||||||
| 				 struct walk_control *wc, int *lookup_info) | 				 struct walk_control *wc) | ||||||
| { | { | ||||||
| 	struct btrfs_fs_info *fs_info = root->fs_info; | 	struct btrfs_fs_info *fs_info = root->fs_info; | ||||||
| 	u64 bytenr; | 	u64 bytenr; | ||||||
|  | @ -5445,7 +5447,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, | ||||||
| 	 */ | 	 */ | ||||||
| 	if (wc->stage == UPDATE_BACKREF && | 	if (wc->stage == UPDATE_BACKREF && | ||||||
| 	    generation <= root->root_key.offset) { | 	    generation <= root->root_key.offset) { | ||||||
| 		*lookup_info = 1; | 		wc->lookup_info = 1; | ||||||
| 		return 1; | 		return 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -5477,7 +5479,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, | ||||||
| 		ret = -EIO; | 		ret = -EIO; | ||||||
| 		goto out_unlock; | 		goto out_unlock; | ||||||
| 	} | 	} | ||||||
| 	*lookup_info = 0; | 	wc->lookup_info = 0; | ||||||
| 
 | 
 | ||||||
| 	if (wc->stage == DROP_REFERENCE) { | 	if (wc->stage == DROP_REFERENCE) { | ||||||
| 		if (wc->refs[level - 1] > 1) { | 		if (wc->refs[level - 1] > 1) { | ||||||
|  | @ -5515,7 +5517,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, | ||||||
| 			return ret; | 			return ret; | ||||||
| 		} | 		} | ||||||
| 		btrfs_tree_lock(next); | 		btrfs_tree_lock(next); | ||||||
| 		*lookup_info = 1; | 		wc->lookup_info = 1; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	level--; | 	level--; | ||||||
|  | @ -5604,7 +5606,7 @@ static noinline int do_walk_down(struct btrfs_trans_handle *trans, | ||||||
| 			goto out_unlock; | 			goto out_unlock; | ||||||
| 	} | 	} | ||||||
| no_delete: | no_delete: | ||||||
| 	*lookup_info = 1; | 	wc->lookup_info = 1; | ||||||
| 	ret = 1; | 	ret = 1; | ||||||
| 
 | 
 | ||||||
| out_unlock: | out_unlock: | ||||||
|  | @ -5738,11 +5740,11 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, | ||||||
| 				   struct walk_control *wc) | 				   struct walk_control *wc) | ||||||
| { | { | ||||||
| 	int level = wc->level; | 	int level = wc->level; | ||||||
| 	int lookup_info = 1; |  | ||||||
| 	int ret = 0; | 	int ret = 0; | ||||||
| 
 | 
 | ||||||
|  | 	wc->lookup_info = 1; | ||||||
| 	while (level >= 0) { | 	while (level >= 0) { | ||||||
| 		ret = walk_down_proc(trans, root, path, wc, lookup_info); | 		ret = walk_down_proc(trans, root, path, wc); | ||||||
| 		if (ret) | 		if (ret) | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
|  | @ -5753,7 +5755,7 @@ static noinline int walk_down_tree(struct btrfs_trans_handle *trans, | ||||||
| 		    btrfs_header_nritems(path->nodes[level])) | 		    btrfs_header_nritems(path->nodes[level])) | ||||||
| 			break; | 			break; | ||||||
| 
 | 
 | ||||||
| 		ret = do_walk_down(trans, root, path, wc, &lookup_info); | 		ret = do_walk_down(trans, root, path, wc); | ||||||
| 		if (ret > 0) { | 		if (ret > 0) { | ||||||
| 			path->slots[level]++; | 			path->slots[level]++; | ||||||
| 			continue; | 			continue; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Josef Bacik
						Josef Bacik