From: Matt Benjamin Date: Sat, 19 Dec 2015 17:36:49 +0000 (-0500) Subject: librgw: fix RGWLibFS::stat_leaf ex-ref X-Git-Tag: v10.1.0~382^2~90 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6147c3e526f28ef66eac81057c1ff13a5229e4c1;p=ceph.git librgw: fix RGWLibFS::stat_leaf ex-ref Found verifying refcounts at RGWLibFS::close. Signed-off-by: Matt Benjamin --- diff --git a/src/common/cohort_lru.h b/src/common/cohort_lru.h index d3afa49fba44..cdabb1e5bef8 100644 --- a/src/common/cohort_lru.h +++ b/src/common/cohort_lru.h @@ -66,6 +66,8 @@ namespace cohort { Object() : lru_flags(FLAG_NONE), lru_refcnt(0), lru_adj(0) {} + uint32_t get_refcnt() const { return lru_refcnt; } + virtual bool reclaim() = 0; virtual ~Object() {} diff --git a/src/rgw/rgw_file.cc b/src/rgw/rgw_file.cc index 8527b98abcc4..9d7d336fa804 100644 --- a/src/rgw/rgw_file.cc +++ b/src/rgw/rgw_file.cc @@ -73,6 +73,7 @@ LookupFHResult RGWLibFS::stat_leaf(RGWFileHandle* parent, if ((rc == 0) && (req.get_ret() == 0)) { fhr = lookup_fh(parent, path, RGWFileHandle::FLAG_NONE); + goto done; } } break; @@ -97,6 +98,7 @@ LookupFHResult RGWLibFS::stat_leaf(RGWFileHandle* parent, break; } } +done: return fhr; } /* RGWLibFS::stat_leaf */ diff --git a/src/rgw/rgw_file.h b/src/rgw/rgw_file.h index af34a7f4f138..bfd80b07760f 100644 --- a/src/rgw/rgw_file.h +++ b/src/rgw/rgw_file.h @@ -666,6 +666,12 @@ namespace rgw { ObjUnref(RGWLibFS* fs) : fs(fs) {} void operator()(RGWFileHandle* fh) const { fs->fh_lru.unref(fh, cohort::lru::FLAG_NONE); + + lsubdout(fs->get_context(), rgw, 5) + << __func__ + << fh->name + << " refs=" << fh->get_refcnt() + << dendl; } };