]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: lock remote inode's primary dentry during rename
authorYan, Zheng <zheng.z.yan@intel.com>
Sat, 5 Jan 2013 02:07:11 +0000 (10:07 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Mon, 28 Jan 2013 02:18:15 +0000 (10:18 +0800)
commit 1203cd2110 (mds: allow open_remote_ino() to open xlocked dentry)
makes Server::handle_client_rename() xlocks remote inodes' primary
dentry so witness MDS can open xlocked dentry. But I added remote inodes'
projected primary dentries to the xlock list. This is wrong because
projected dentries are invisible for path traverse.

Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
src/mds/Server.cc

index ebdbfe4b04e53172634b2fbb0497c55df9da09bc..eced76fe5f5f7d3f99faf40b5736336c2368285f 100644 (file)
@@ -5351,9 +5351,9 @@ void Server::handle_client_rename(MDRequest *mdr)
     // open_remote_ino() with 'want_locked=true' when the srcdn or destdn
     // is traversed.
     if (srcdnl->is_remote())
-      xlocks.insert(&srci->get_projected_parent_dn()->lock);
+      xlocks.insert(&srci->get_parent_dn()->lock);
     if (destdnl->is_remote())
-      xlocks.insert(&oldin->get_projected_parent_dn()->lock);
+      xlocks.insert(&oldin->get_parent_dn()->lock);
   }
 
   // we need to update srci's ctime.  xlock its least contended lock to do that...