]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: rdlock dirfragtree lock when renaming directory
authorYan, Zheng <zheng.z.yan@intel.com>
Thu, 13 Mar 2014 01:53:04 +0000 (09:53 +0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Wed, 19 Mar 2014 03:35:56 +0000 (11:35 +0800)
This make sure inode importer and inode exporter have consistent
view of dirfrags.

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

index 8624da20a81890fa4f73c9ecfd73f317ee2c580c..4b6b752ccb7d7d1dc2949aa3ac5e2be4015f36ba 100644 (file)
@@ -5656,6 +5656,8 @@ void Server::handle_client_rename(MDRequest *mdr)
     dout(10) << " will remote_wrlock srcdir scatterlocks on mds." << srcdirauth << dendl;
     remote_wrlocks[&srcdn->get_dir()->inode->filelock] = srcdirauth;
     remote_wrlocks[&srcdn->get_dir()->inode->nestlock] = srcdirauth;
+    if (srci->is_dir())
+      rdlocks.insert(&srci->dirfragtreelock);
   } else {
     wrlocks.insert(&srcdn->get_dir()->inode->filelock);
     wrlocks.insert(&srcdn->get_dir()->inode->nestlock);