diff options
Diffstat (limited to 'fs/btrfs/inode-item.c')
| -rw-r--r-- | fs/btrfs/inode-item.c | 62 | 
1 files changed, 27 insertions, 35 deletions
diff --git a/fs/btrfs/inode-item.c b/fs/btrfs/inode-item.c index 30d62ef918b9..668701832845 100644 --- a/fs/btrfs/inode-item.c +++ b/fs/btrfs/inode-item.c @@ -8,9 +8,9 @@  #include "transaction.h"  #include "print-tree.h" -int btrfs_find_name_in_backref(struct extent_buffer *leaf, int slot, -			       const char *name, -			       int name_len, struct btrfs_inode_ref **ref_ret) +struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf, +						   int slot, const char *name, +						   int name_len)  {  	struct btrfs_inode_ref *ref;  	unsigned long ptr; @@ -28,19 +28,15 @@ int btrfs_find_name_in_backref(struct extent_buffer *leaf, int slot,  		cur_offset += len + sizeof(*ref);  		if (len != name_len)  			continue; -		if (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0) { -			if (ref_ret) -				*ref_ret = ref; -			return 1; -		} +		if (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0) +			return ref;  	} -	return 0; +	return NULL;  } -int btrfs_find_name_in_ext_backref(struct extent_buffer *leaf, int slot, -				   u64 ref_objectid, -				   const char *name, int name_len, -				   struct btrfs_inode_extref **extref_ret) +struct btrfs_inode_extref *btrfs_find_name_in_ext_backref( +		struct extent_buffer *leaf, int slot, u64 ref_objectid, +		const char *name, int name_len)  {  	struct btrfs_inode_extref *extref;  	unsigned long ptr; @@ -65,15 +61,12 @@ int btrfs_find_name_in_ext_backref(struct extent_buffer *leaf, int slot,  		if (ref_name_len == name_len &&  		    btrfs_inode_extref_parent(leaf, extref) == ref_objectid && -		    (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0)) { -			if (extref_ret) -				*extref_ret = extref; -			return 1; -		} +		    (memcmp_extent_buffer(leaf, name, name_ptr, name_len) == 0)) +			return extref;  		cur_offset += ref_name_len + sizeof(*extref);  	} -	return 0; +	return NULL;  }  /* Returns NULL if no extref found */ @@ -87,7 +80,6 @@ btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,  {  	int ret;  	struct btrfs_key key; -	struct btrfs_inode_extref *extref;  	key.objectid = inode_objectid;  	key.type = BTRFS_INODE_EXTREF_KEY; @@ -98,11 +90,9 @@ btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,  		return ERR_PTR(ret);  	if (ret > 0)  		return NULL; -	if (!btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0], -					    ref_objectid, name, name_len, -					    &extref)) -		return NULL; -	return extref; +	return btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0], +					      ref_objectid, name, name_len); +  }  static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans, @@ -142,9 +132,9 @@ static int btrfs_del_inode_extref(struct btrfs_trans_handle *trans,  	 * This should always succeed so error here will make the FS  	 * readonly.  	 */ -	if (!btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0], -					    ref_objectid, -					    name, name_len, &extref)) { +	extref = btrfs_find_name_in_ext_backref(path->nodes[0], path->slots[0], +						ref_objectid, name, name_len); +	if (!extref) {  		btrfs_handle_fs_error(root->fs_info, -ENOENT, NULL);  		ret = -EROFS;  		goto out; @@ -213,8 +203,10 @@ int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,  	} else if (ret < 0) {  		goto out;  	} -	if (!btrfs_find_name_in_backref(path->nodes[0], path->slots[0], -					name, name_len, &ref)) { + +	ref = btrfs_find_name_in_backref(path->nodes[0], path->slots[0], name, +					 name_len); +	if (!ref) {  		ret = -ENOENT;  		search_ext_refs = 1;  		goto out; @@ -285,7 +277,7 @@ static int btrfs_insert_inode_extref(struct btrfs_trans_handle *trans,  		if (btrfs_find_name_in_ext_backref(path->nodes[0],  						   path->slots[0],  						   ref_objectid, -						   name, name_len, NULL)) +						   name, name_len))  			goto out;  		btrfs_extend_item(path, ins_len); @@ -341,9 +333,9 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,  				      ins_len);  	if (ret == -EEXIST) {  		u32 old_size; - -		if (btrfs_find_name_in_backref(path->nodes[0], path->slots[0], -					       name, name_len, &ref)) +		ref = btrfs_find_name_in_backref(path->nodes[0], path->slots[0], +						 name, name_len); +		if (ref)  			goto out;  		old_size = btrfs_item_size_nr(path->nodes[0], path->slots[0]); @@ -359,7 +351,7 @@ int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,  		if (ret == -EOVERFLOW) {  			if (btrfs_find_name_in_backref(path->nodes[0],  						       path->slots[0], -						       name, name_len, &ref)) +						       name, name_len))  				ret = -EEXIST;  			else  				ret = -EMLINK;  |