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)
committerIlya Dryomov <idryomov@gmail.com>
Tue, 29 Oct 2019 21:29:55 +0000 (22:29 +0100)
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>
fs/ceph/inode.c

index 9f135624ae476a23ab610cff33d173646e111724..c07407586ce873f236a1cf61d0ea48efa27590c4 100644 (file)
@@ -1434,6 +1434,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 inode *dir = req->r_parent;