From: Robbie Ko Date: Fri, 7 Oct 2016 02:01:29 +0000 (+0800) Subject: Btrfs: fix leak of subvolume writers counter X-Git-Tag: v4.11-rc1~23^2~1^2~6 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=91e1f56a8b3c94cb5ac9ce12b806134dc33c1eeb;p=karo-tx-linux.git Btrfs: fix leak of subvolume writers counter When falling back from a nocow write to a regular cow write, we were leaking the subvolume writers counter in 2 situations, preventing snapshot creation from ever completing in the future, as it waits for that counter to go down to zero before the snapshot creation starts. Signed-off-by: Robbie Ko Reviewed-by: Filipe Manana [Improved changelog and subject] Signed-off-by: Filipe Manana --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index c38391e948d9..4efe9d82944c 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -1331,10 +1331,16 @@ next_slot: * either valid or do not exist. */ if (csum_exist_in_range(fs_info, disk_bytenr, - num_bytes)) + num_bytes)) { + if (!nolock) + btrfs_end_write_no_snapshoting(root); goto out_check; - if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) + } + if (!btrfs_inc_nocow_writers(fs_info, disk_bytenr)) { + if (!nolock) + btrfs_end_write_no_snapshoting(root); goto out_check; + } nocow = 1; } else if (extent_type == BTRFS_FILE_EXTENT_INLINE) { extent_end = found_key.offset +