From: Yan, Zheng Date: Thu, 14 Mar 2013 12:56:27 +0000 (+0800) Subject: mds: take object's versionlock when rejoinning xlock X-Git-Tag: v0.62~120^2~17 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b2342a9c31eb4008d609c0796c75d80cd8a8d526;p=ceph.git mds: take object's versionlock when rejoinning xlock Signed-off-by: Yan, Zheng Reviewed-by: Greg Farnum --- diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 86f7c09a75f..b0fe2b73042 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -4331,6 +4331,12 @@ void MDCache::handle_cache_rejoin_strong(MMDSCacheRejoin *strong) dout(10) << " dn xlock by " << r << " on " << *dn << dendl; MDRequest *mdr = request_get(r.reqid); // should have this from auth_pin above. assert(mdr->is_auth_pinned(dn)); + if (!mdr->xlocks.count(&dn->versionlock)) { + assert(dn->versionlock.can_xlock_local()); + dn->versionlock.get_xlock(mdr, mdr->get_client()); + mdr->xlocks.insert(&dn->versionlock); + mdr->locks.insert(&dn->versionlock); + } if (dn->lock.is_stable()) dn->auth_pin(&dn->lock); dn->lock.set_state(LOCK_XLOCK); @@ -4427,6 +4433,12 @@ void MDCache::handle_cache_rejoin_strong(MMDSCacheRejoin *strong) dout(10) << " inode xlock by " << q->second << " on " << *lock << " on " << *in << dendl; MDRequest *mdr = request_get(q->second.reqid); // should have this from auth_pin above. assert(mdr->is_auth_pinned(in)); + if (!mdr->xlocks.count(&in->versionlock)) { + assert(in->versionlock.can_xlock_local()); + in->versionlock.get_xlock(mdr, mdr->get_client()); + mdr->xlocks.insert(&in->versionlock); + mdr->locks.insert(&in->versionlock); + } if (lock->is_stable()) in->auth_pin(lock); lock->set_state(LOCK_XLOCK);