From: Yan, Zheng Date: Mon, 16 Dec 2019 07:48:42 +0000 (+0800) Subject: mds: pin dentry when attaching batch lookup to it X-Git-Tag: v15.1.0~326^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1a9a06c35bf35a937de5a3df8acc429c61bdc441;p=ceph.git mds: pin dentry when attaching batch lookup to it Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/CDentry.h b/src/mds/CDentry.h index 98ebb046409..353b5e24aef 100644 --- a/src/mds/CDentry.h +++ b/src/mds/CDentry.h @@ -123,6 +123,10 @@ public: linkage.remote_d_type = dt; } + ~CDentry() override { + ceph_assert(batch_ops.empty()); + } + std::string_view pin_name(int p) const override { switch (p) { case PIN_INODEPIN: return "inodepin"; diff --git a/src/mds/CInode.h b/src/mds/CInode.h index c0b8a5fd657..b3c82ef4f64 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -347,6 +347,7 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counter> batch_ops; diff --git a/src/mds/Server.cc b/src/mds/Server.cc index f81f4288a49..60edf37d965 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -3556,7 +3556,8 @@ void Server::handle_client_getattr(MDRequestRef& mdr, bool is_lookup) CDentry* dn = mdr->dn[0].back(); auto em = dn->batch_ops.emplace(std::piecewise_construct, std::forward_as_tuple(mask), std::forward_as_tuple()); if (em.second) { - em.first->second = std::make_unique(this, mdr, mdcache); + em.first->second = std::make_unique(this, mdr, mdcache); + mdr->pin(dn); } else { dout(20) << __func__ << ": LOOKUP op, wait for previous same getattr ops to respond. " << *mdr << dendl; em.first->second->add_request(mdr);