diff options
author | 2024-11-29 13:33:03 +0000 | |
---|---|---|
committer | 2024-12-03 20:27:02 +0100 | |
commit | 9c803c474c6c002d8ade68ebe99026cc39c37f85 (patch) | |
tree | 89ae32616aec62d212a9ed5ee829a80e87e6861e | |
parent | btrfs: fix mount failure due to remount races (diff) | |
download | wireguard-linux-9c803c474c6c002d8ade68ebe99026cc39c37f85.tar.xz wireguard-linux-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>
-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", |