From d595a4c578d80c306aaa9a529c85ad552d0a4fa8 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Mon, 16 Dec 2019 15:54:01 +0800 Subject: [PATCH] mds: only enable batch getattr/lookup for non-snap request. MDS may cow dentry/inode. After COWing, batch getattr/lookup for snap request can be attched to wrong object. Signed-off-by: "Yan, Zheng" --- src/mds/Server.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 60edf37d965d..c7418007e6f0 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -3542,7 +3542,7 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup) mdr->getattr_caps = mask; - if (!mdr->is_batch_head && mdr->is_batch_op()) { + if (mdr->snapid == CEPH_NOSNAP && !mdr->is_batch_head && mdr->is_batch_op()) { if (!is_lookup) { auto em = ref->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple()); if (em.second) { @@ -3564,8 +3564,8 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup) return; } } + mdr->is_batch_head = true; } - mdr->is_batch_head = true; /* * if client currently holds the EXCL cap on a field, do not rdlock -- 2.47.3