]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix nested update in rename
authorSage Weil <sage@newdream.net>
Wed, 28 May 2008 21:32:59 +0000 (14:32 -0700)
committerSage Weil <sage@newdream.net>
Wed, 28 May 2008 21:32:59 +0000 (14:32 -0700)
src/mds/Server.cc

index 831cee9e137e27db8b0e489d1d8bd7916b8b9919..33e9daccb88c52e7b8ee044b7e9b809b05aa3f0c 100644 (file)
@@ -3405,22 +3405,20 @@ void Server::_rename_prepare(MDRequest *mdr,
 
   // prepare nesting, mtime updates
   if (mdr->is_master()) {
-    // sub off target
     int predirty_dir = silent ? 0:PREDIRTY_DIR;
-    if (!linkmerge && destdn->is_primary())
-      mds->locker->predirty_nested(mdr, metablob, destdn->inode, destdn->dir, PREDIRTY_PRIMARY|predirty_dir, -1,
+
+    // sub off target
+    if (!destdn->is_null())
+      mds->locker->predirty_nested(mdr, metablob, destdn->inode, destdn->dir,
+                                  (destdn->is_primary() ? PREDIRTY_PRIMARY:0)|predirty_dir, -1,
                                   rollback);
-    if (destdn->dir == srcdn->dir) {
-      // same dir.  don't update nested info or adjust counts.
-      mds->locker->predirty_nested(mdr, metablob, srcdn->inode, srcdn->dir, predirty_dir, 0, rollback);
-    } else {
-      // different dir.  update nested accounting.
-      int flags = srcdn->is_primary() ? PREDIRTY_PRIMARY:0;
-      flags |= predirty_dir;
-      if (srcdn->is_auth())
-       mds->locker->predirty_nested(mdr, metablob, srcdn->inode, srcdn->dir, flags, -1, rollback);
-      mds->locker->predirty_nested(mdr, metablob, srcdn->inode, destdn->dir, flags, 1, rollback);
-    }
+    
+    // move srcdn
+    int predirty_primary = (srcdn->is_primary() && srcdn->dir != destdn->dir) ? PREDIRTY_PRIMARY:0;
+    int flags = predirty_dir | predirty_primary;
+    if (srcdn->is_auth())
+      mds->locker->predirty_nested(mdr, metablob, srcdn->inode, srcdn->dir, flags, -1, rollback);
+    mds->locker->predirty_nested(mdr, metablob, srcdn->inode, destdn->dir, flags, 1, rollback);
   }
 
   // add it all to the metablob