From: Yan, Zheng Date: Wed, 3 Jun 2020 03:51:48 +0000 (+0800) Subject: mds: auth pin CInode when validating its disk state X-Git-Tag: v16.1.0~577^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f01ebadedaf4c4c3851eb17faa563090cc116560;p=ceph.git mds: auth pin CInode when validating its disk state Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 601a144e8c5..11617ff8206 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -4630,6 +4630,9 @@ void CInode::validate_disk_state(CInode::validated_data *results, } bool _start(int rval) { + ceph_assert(in->can_auth_pin()); + in->auth_pin(this); + if (in->is_dirty()) { MDCache *mdcache = in->mdcache; // For the benefit of dout auto ino = [this]() { return in->ino(); }; // For the benefit of dout @@ -4879,6 +4882,8 @@ next: in->scrub_infop->header->set_repaired(); if (fin) fin->complete(get_rval()); + + in->auth_unpin(this); } }; diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index ade41bcb8f8..2868dc3686e 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -12962,7 +12962,7 @@ void MDCache::repair_dirfrag_stats_work(MDRequestRef& mdr) void MDCache::repair_inode_stats(CInode *diri) { MDRequestRef mdr = request_start_internal(CEPH_MDS_OP_REPAIR_INODESTATS); - mdr->pin(diri); + mdr->auth_pin(diri); // already auth pinned by CInode::validate_disk_state() mdr->internal_op_private = diri; mdr->internal_op_finish = new C_MDSInternalNoop; repair_inode_stats_work(mdr); @@ -13062,7 +13062,7 @@ do_rdlocks: void MDCache::rdlock_dirfrags_stats(CInode *diri, MDSInternalContext* fin) { MDRequestRef mdr = request_start_internal(CEPH_MDS_OP_RDLOCK_FRAGSSTATS); - mdr->pin(diri); + mdr->auth_pin(diri); // already auth pinned by CInode::validate_disk_state() mdr->internal_op_private = diri; mdr->internal_op_finish = fin; return rdlock_dirfrags_stats_work(mdr);