diff options
author | Filipe Manana <fdmanana@suse.com> | 2024-11-29 13:33:03 +0000 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2024-12-03 20:27:02 +0100 |
commit | 9c803c474c6c002d8ade68ebe99026cc39c37f85 (patch) | |
tree | 89ae32616aec62d212a9ed5ee829a80e87e6861e /fs/btrfs | |
parent | 951a3f59d268fe1397aaeb9a96fcb1944890c4cb (diff) | |
download | lwn-9c803c474c6c002d8ade68ebe99026cc39c37f85.tar.gz lwn-9c803c474c6c002d8ade68ebe99026cc39c37f85.zip |
btrfs: fix missing snapshot drew unlock when root is dead during swap activation
When activating a swap file we acquire the root's snapshot drew lock and
then check if the root is dead, failing and returning with -EPERM if it's
dead but without unlocking the root's snapshot lock. Fix this by adding
the missing unlock.
Fixes: 60021bd754c6 ("btrfs: prevent subvol with swapfile from being deleted")
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs')
-rw-r--r-- | fs/btrfs/inode.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 659a5940a5b2..94c8809e8170 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -9876,6 +9876,7 @@ static int btrfs_swap_activate(struct swap_info_struct *sis, struct file *file, if (btrfs_root_dead(root)) { spin_unlock(&root->root_item_lock); + btrfs_drew_write_unlock(&root->snapshot_lock); btrfs_exclop_finish(fs_info); btrfs_warn(fs_info, "cannot activate swapfile because subvolume %llu is being deleted", |