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 <robbieko@synology.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
[Improved changelog and subject]
Signed-off-by: Filipe Manana <fdmanana@suse.com>
This commit is contained in:
Robbie Ko 2016-10-07 10:01:29 +08:00 committed by Filipe Manana
parent 6f546216e9
commit 91e1f56a8b
1 changed files with 8 additions and 2 deletions

View File

@ -1331,10 +1331,16 @@ static noinline int run_delalloc_nocow(struct inode *inode,
* 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 +