diff options
author | Filipe Manana <fdmanana@suse.com> | 2024-11-29 13:33:03 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2024-12-14 19:54:50 +0100 |
commit | b15437fb260f93c31c172e5a8e8a4ab13b934e5a (patch) | |
tree | a5411f78566307333f9b90cd667cf336ef63349c /fs/btrfs | |
parent | 641e9638aadfa88f1b3e5aff51e3fe144655b841 (diff) | |
download | linux-b15437fb260f93c31c172e5a8e8a4ab13b934e5a.tar.gz linux-b15437fb260f93c31c172e5a8e8a4ab13b934e5a.tar.bz2 linux-b15437fb260f93c31c172e5a8e8a4ab13b934e5a.zip |
btrfs: fix missing snapshot drew unlock when root is dead during swap activation
[ Upstream commit 9c803c474c6c002d8ade68ebe99026cc39c37f85 ]
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
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 8fc8a24a1afe..eb5f03c3336c 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -11228,6 +11228,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", |