diff options
Diffstat (limited to 'fs/btrfs/delayed-inode.c')
| -rw-r--r-- | fs/btrfs/delayed-inode.c | 12 | 
1 files changed, 6 insertions, 6 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 335605c8cea..07d5eeb1e6f 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c @@ -512,8 +512,8 @@ static void __btrfs_remove_delayed_item(struct btrfs_delayed_item *delayed_item)  	rb_erase(&delayed_item->rb_node, root);  	delayed_item->delayed_node->count--; -	atomic_dec(&delayed_root->items); -	if (atomic_read(&delayed_root->items) < BTRFS_DELAYED_BACKGROUND && +	if (atomic_dec_return(&delayed_root->items) < +	    BTRFS_DELAYED_BACKGROUND &&  	    waitqueue_active(&delayed_root->wait))  		wake_up(&delayed_root->wait);  } @@ -1028,9 +1028,10 @@ do_again:  		btrfs_release_delayed_item(prev);  		ret = 0;  		btrfs_release_path(path); -		if (curr) +		if (curr) { +			mutex_unlock(&node->mutex);  			goto do_again; -		else +		} else  			goto delete_fail;  	} @@ -1055,8 +1056,7 @@ static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node)  		delayed_node->count--;  		delayed_root = delayed_node->root->fs_info->delayed_root; -		atomic_dec(&delayed_root->items); -		if (atomic_read(&delayed_root->items) < +		if (atomic_dec_return(&delayed_root->items) <  		    BTRFS_DELAYED_BACKGROUND &&  		    waitqueue_active(&delayed_root->wait))  			wake_up(&delayed_root->wait);  |