Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f106e82c authored by Li Zefan's avatar Li Zefan Committed by Chris Mason
Browse files

Btrfs: Fix a crash when mounting a subvolume



We should drop dentry before deactivating the superblock, otherwise
we can hit this bug:

BUG: Dentry f349a690{i=100,n=/} still in use (1) [unmount of btrfs loop1]
...

Steps to reproduce the bug:

  # mount /dev/loop1 /mnt
  # mkdir save
  # btrfs subvolume snapshot /mnt save/snap1
  # umount /mnt
  # mount -o subvol=save/snap1 /dev/loop1 /mnt
  (crash)

Reported-by: default avatarMichael Niederle <mniederle@gmx.at>
Signed-off-by: default avatarLi Zefan <lizf@cn.fujitsu.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 75eaa0e2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -685,9 +685,9 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags,
		mutex_unlock(&root->d_inode->i_mutex);

		if (IS_ERR(new_root)) {
			dput(root);
			deactivate_locked_super(s);
			error = PTR_ERR(new_root);
			dput(root);
			goto error_free_subvol_name;
		}
		if (!new_root->d_inode) {