diff options
Diffstat (limited to 'fs/btrfs/extent-tree.c')
| -rw-r--r-- | fs/btrfs/extent-tree.c | 22 | 
1 files changed, 10 insertions, 12 deletions
diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index 45d98d01028f..9c01509dd8ab 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -767,20 +767,19 @@ int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,  	if (!path)  		return -ENOMEM; -	if (metadata) { -		key.objectid = bytenr; -		key.type = BTRFS_METADATA_ITEM_KEY; -		key.offset = offset; -	} else { -		key.objectid = bytenr; -		key.type = BTRFS_EXTENT_ITEM_KEY; -		key.offset = offset; -	} -  	if (!trans) {  		path->skip_locking = 1;  		path->search_commit_root = 1;  	} + +search_again: +	key.objectid = bytenr; +	key.offset = offset; +	if (metadata) +		key.type = BTRFS_METADATA_ITEM_KEY; +	else +		key.type = BTRFS_EXTENT_ITEM_KEY; +  again:  	ret = btrfs_search_slot(trans, root->fs_info->extent_root,  				&key, path, 0, 0); @@ -788,7 +787,6 @@ again:  		goto out_free;  	if (ret > 0 && metadata && key.type == BTRFS_METADATA_ITEM_KEY) { -		metadata = 0;  		if (path->slots[0]) {  			path->slots[0]--;  			btrfs_item_key_to_cpu(path->nodes[0], &key, @@ -855,7 +853,7 @@ again:  			mutex_lock(&head->mutex);  			mutex_unlock(&head->mutex);  			btrfs_put_delayed_ref(&head->node); -			goto again; +			goto search_again;  		}  		if (head->extent_op && head->extent_op->update_flags)  			extent_flags |= head->extent_op->flags_to_set;  | 
