| From 1f08529c84cfecaf1261ed9b7e17fab18541c58f Mon Sep 17 00:00:00 2001 |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| Date: Tue, 29 Oct 2019 13:53:29 +0000 |
| Subject: ceph: add missing check in d_revalidate snapdir handling |
| |
| From: Al Viro <viro@zeniv.linux.org.uk> |
| |
| 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> |
| |
| --- |
| fs/ceph/inode.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/fs/ceph/inode.c |
| +++ b/fs/ceph/inode.c |
| @@ -1347,6 +1347,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; |