]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
bcachefs: bch2_ioctl_subvolume_destroy() fixes
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 29 Mar 2025 23:01:09 +0000 (19:01 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Apr 2025 08:08:37 +0000 (10:08 +0200)
[ Upstream commit 707549600c4a012ed71c0204a7992a679880bf33 ]

bch2_evict_subvolume_inodes() was getting stuck - due to incorrectly
pruning the dcache.

Also, fix missing permissions checks.

Reported-by: Alexander Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/bcachefs/fs-ioctl.c

index 405cf08bda3473c8cdf26ee51f38e6b7c1a9d13f..e599d5ac6e4d2ae7dd5e189f5a2c75883de7000c 100644 (file)
@@ -520,10 +520,12 @@ static long bch2_ioctl_subvolume_destroy(struct bch_fs *c, struct file *filp,
                ret = -ENOENT;
                goto err;
        }
-       ret = __bch2_unlink(dir, victim, true);
+
+       ret =   inode_permission(file_mnt_idmap(filp), d_inode(victim), MAY_WRITE) ?:
+               __bch2_unlink(dir, victim, true);
        if (!ret) {
                fsnotify_rmdir(dir, victim);
-               d_delete(victim);
+               d_invalidate(victim);
        }
 err:
        inode_unlock(dir);