diff options
Diffstat (limited to 'fs/btrfs/delayed-ref.c')
| -rw-r--r-- | fs/btrfs/delayed-ref.c | 33 | 
1 files changed, 11 insertions, 22 deletions
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c index 66e4f29505a3..69f22e3ab3bc 100644 --- a/fs/btrfs/delayed-ref.c +++ b/fs/btrfs/delayed-ref.c @@ -420,7 +420,7 @@ update_existing_head_ref(struct btrfs_delayed_ref_node *existing,   * this does all the dirty work in terms of maintaining the correct   * overall modification count.   */ -static noinline int add_delayed_ref_head(struct btrfs_fs_info *fs_info, +static noinline void add_delayed_ref_head(struct btrfs_fs_info *fs_info,  					struct btrfs_trans_handle *trans,  					struct btrfs_delayed_ref_node *ref,  					u64 bytenr, u64 num_bytes, @@ -487,20 +487,19 @@ static noinline int add_delayed_ref_head(struct btrfs_fs_info *fs_info,  		 * we've updated the existing ref, free the newly  		 * allocated ref  		 */ -		kfree(ref); +		kfree(head_ref);  	} else {  		delayed_refs->num_heads++;  		delayed_refs->num_heads_ready++;  		delayed_refs->num_entries++;  		trans->delayed_ref_updates++;  	} -	return 0;  }  /*   * helper to insert a delayed tree ref into the rbtree.   */ -static noinline int add_delayed_tree_ref(struct btrfs_fs_info *fs_info, +static noinline void add_delayed_tree_ref(struct btrfs_fs_info *fs_info,  					 struct btrfs_trans_handle *trans,  					 struct btrfs_delayed_ref_node *ref,  					 u64 bytenr, u64 num_bytes, u64 parent, @@ -549,18 +548,17 @@ static noinline int add_delayed_tree_ref(struct btrfs_fs_info *fs_info,  		 * we've updated the existing ref, free the newly  		 * allocated ref  		 */ -		kfree(ref); +		kfree(full_ref);  	} else {  		delayed_refs->num_entries++;  		trans->delayed_ref_updates++;  	} -	return 0;  }  /*   * helper to insert a delayed data ref into the rbtree.   */ -static noinline int add_delayed_data_ref(struct btrfs_fs_info *fs_info, +static noinline void add_delayed_data_ref(struct btrfs_fs_info *fs_info,  					 struct btrfs_trans_handle *trans,  					 struct btrfs_delayed_ref_node *ref,  					 u64 bytenr, u64 num_bytes, u64 parent, @@ -611,12 +609,11 @@ static noinline int add_delayed_data_ref(struct btrfs_fs_info *fs_info,  		 * we've updated the existing ref, free the newly  		 * allocated ref  		 */ -		kfree(ref); +		kfree(full_ref);  	} else {  		delayed_refs->num_entries++;  		trans->delayed_ref_updates++;  	} -	return 0;  }  /* @@ -634,7 +631,6 @@ int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info,  	struct btrfs_delayed_tree_ref *ref;  	struct btrfs_delayed_ref_head *head_ref;  	struct btrfs_delayed_ref_root *delayed_refs; -	int ret;  	BUG_ON(extent_op && extent_op->is_data);  	ref = kmalloc(sizeof(*ref), GFP_NOFS); @@ -656,14 +652,12 @@ int btrfs_add_delayed_tree_ref(struct btrfs_fs_info *fs_info,  	 * insert both the head node and the new ref without dropping  	 * the spin lock  	 */ -	ret = add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr, +	add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,  				   num_bytes, action, 0); -	BUG_ON(ret); -	ret = add_delayed_tree_ref(fs_info, trans, &ref->node, bytenr, +	add_delayed_tree_ref(fs_info, trans, &ref->node, bytenr,  				   num_bytes, parent, ref_root, level, action,  				   for_cow); -	BUG_ON(ret);  	if (!need_ref_seq(for_cow, ref_root) &&  	    waitqueue_active(&delayed_refs->seq_wait))  		wake_up(&delayed_refs->seq_wait); @@ -685,7 +679,6 @@ int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info,  	struct btrfs_delayed_data_ref *ref;  	struct btrfs_delayed_ref_head *head_ref;  	struct btrfs_delayed_ref_root *delayed_refs; -	int ret;  	BUG_ON(extent_op && !extent_op->is_data);  	ref = kmalloc(sizeof(*ref), GFP_NOFS); @@ -707,14 +700,12 @@ int btrfs_add_delayed_data_ref(struct btrfs_fs_info *fs_info,  	 * insert both the head node and the new ref without dropping  	 * the spin lock  	 */ -	ret = add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr, +	add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,  				   num_bytes, action, 1); -	BUG_ON(ret); -	ret = add_delayed_data_ref(fs_info, trans, &ref->node, bytenr, +	add_delayed_data_ref(fs_info, trans, &ref->node, bytenr,  				   num_bytes, parent, ref_root, owner, offset,  				   action, for_cow); -	BUG_ON(ret);  	if (!need_ref_seq(for_cow, ref_root) &&  	    waitqueue_active(&delayed_refs->seq_wait))  		wake_up(&delayed_refs->seq_wait); @@ -729,7 +720,6 @@ int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info,  {  	struct btrfs_delayed_ref_head *head_ref;  	struct btrfs_delayed_ref_root *delayed_refs; -	int ret;  	head_ref = kmalloc(sizeof(*head_ref), GFP_NOFS);  	if (!head_ref) @@ -740,10 +730,9 @@ int btrfs_add_delayed_extent_op(struct btrfs_fs_info *fs_info,  	delayed_refs = &trans->transaction->delayed_refs;  	spin_lock(&delayed_refs->lock); -	ret = add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr, +	add_delayed_ref_head(fs_info, trans, &head_ref->node, bytenr,  				   num_bytes, BTRFS_UPDATE_DELAYED_HEAD,  				   extent_op->is_data); -	BUG_ON(ret);  	if (waitqueue_active(&delayed_refs->seq_wait))  		wake_up(&delayed_refs->seq_wait);  |