]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: take object's versionlock when rejoinning xlock
authorYan, Zheng <zheng.z.yan@intel.com>
Thu, 14 Mar 2013 12:56:27 +0000 (20:56 +0800)
committerGreg Farnum <greg@inktank.com>
Mon, 1 Apr 2013 16:26:23 +0000 (09:26 -0700)
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/mds/MDCache.cc

index 86f7c09a75f78ea5363ce76cc8dcca88d2a91645..b0fe2b730423bc87aef724c50ca4ab04887a4bb5 100644 (file)
@@ -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);