From: Yan, Zheng Date: Mon, 16 Dec 2019 07:54:01 +0000 (+0800) Subject: mds: only enable batch getattr/lookup for non-snap request. X-Git-Tag: v15.1.0~326^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d595a4c578d80c306aaa9a529c85ad552d0a4fa8;p=ceph.git 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" --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 60edf37d965..c7418007e6f 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