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:
parent
6f546216e9
commit
91e1f56a8b
|
@ -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 +
|
||||
|
|
Loading…
Reference in New Issue