]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix pre_dirty/mark_dirty order for remote dentries in unlink_local
authorSage Weil <sage@newdream.net>
Thu, 30 Oct 2008 18:15:55 +0000 (11:15 -0700)
committerSage Weil <sage@newdream.net>
Thu, 30 Oct 2008 18:15:55 +0000 (11:15 -0700)
src/mds/Server.cc

index 199c298c9e2d00da2c89abe860ddc82a26748ca1..ef6af76144a6818c2c7632b8971fe3985153435a 100644 (file)
@@ -2994,14 +2994,15 @@ void Server::_unlink_local(MDRequest *mdr, CDentry *dn, CDentry *straydn)
   if (dn->is_primary())
     dn->inode->projected_parent = straydn;
 
+  // the unlinked dentry
+  dn->pre_dirty();
+
   inode_t *pi = dn->inode->project_inode();
-  mdr->add_projected_inode(dn->inode);
+  mdr->add_projected_inode(dn->inode); // do this _after_ my dn->pre_dirty().. we apply that one manually.
   pi->version = dn->inode->pre_dirty();
   pi->nlink--;
   pi->ctime = mdr->now;
 
-  // the unlinked dentry
-  dn->pre_dirty();
   mdcache->journal_cow_dentry(mdr, &le->metablob, dn);
   le->metablob.add_null_dentry(dn, true);