]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
ceph: add missing check in d_revalidate snapdir handling
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 29 Oct 2019 13:53:29 +0000 (13:53 +0000)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 26 Nov 2019 12:16:06 +0000 (13:16 +0100)
BugLink: https://bugs.launchpad.net/bugs/1853519
commit 1f08529c84cfecaf1261ed9b7e17fab18541c58f upstream.

We should not play with dcache without parent locked...

Cc: stable@vger.kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
fs/ceph/inode.c

index 3ca83269391be411ca87625e5968ddc8146301bd..b5ed495192a920a8e9038abc9ac5d23713184505 100644 (file)
@@ -1378,6 +1378,7 @@ retry_lookup:
                dout(" final dn %p\n", dn);
        } else if ((req->r_op == CEPH_MDS_OP_LOOKUPSNAP ||
                    req->r_op == CEPH_MDS_OP_MKSNAP) &&
+                  test_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags) &&
                   !test_bit(CEPH_MDS_R_ABORTED, &req->r_req_flags)) {
                struct dentry *dn = req->r_dentry;
                struct inode *dir = req->r_parent;