]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: cleaned up link/unlink accounting a bit
authorSage Weil <sage@newdream.net>
Sat, 24 May 2008 20:18:50 +0000 (13:18 -0700)
committerSage Weil <sage@newdream.net>
Sat, 24 May 2008 20:18:50 +0000 (13:18 -0700)
src/include/types.h
src/mds/Locker.cc
src/mds/Server.cc

index 131e0642728b28d59891879b2a8e3987b602bc18..807e8fefd0e49b08076262aaf9373be6a03bca95 100644 (file)
@@ -205,10 +205,6 @@ struct nested_info_t {
   __u64 rfiles;
   __u64 rsubdirs;
   
-  void zero() {
-    rbytes = rfiles = rsubdirs = 0;
-  }
-
   void encode(bufferlist &bl) const {
     ::encode(rbytes, bl);
     ::encode(rfiles, bl);
index b20590230ff247be71b0fd05f6c3480e0094a705..6f9f3d81ab6310286be4608ab1a0bd62e8c5d8b8 100644 (file)
@@ -1278,9 +1278,19 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
       }
     }
     if (primary_dn) {
-      drbytes = curi->nested.rbytes - curi->accounted_nested.rbytes;
-      drfiles = curi->nested.rfiles - curi->accounted_nested.rfiles;
-      drsubdirs = curi->nested.rsubdirs - curi->accounted_nested.rsubdirs;
+      if (linkunlink == 0) {
+       drbytes = curi->nested.rbytes - curi->accounted_nested.rbytes;
+       drfiles = curi->nested.rfiles - curi->accounted_nested.rfiles;
+       drsubdirs = curi->nested.rsubdirs - curi->accounted_nested.rsubdirs;
+      } else if (linkunlink < 0) {
+       drbytes = 0 - curi->accounted_nested.rbytes;
+       drfiles = 0 - curi->accounted_nested.rfiles;
+       drsubdirs = 0 - curi->accounted_nested.rsubdirs;
+      } else {
+       drbytes = curi->nested.rbytes;
+       drfiles = curi->nested.rfiles;
+       drsubdirs = curi->nested.rsubdirs;
+      }
       rctime = MAX(curi->ctime, curi->nested.rctime);
 
       dout(10) << "predirty_nested delta "
@@ -1291,10 +1301,7 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
       pf->nested.rsubdirs += drsubdirs;
       pf->nested.rctime = rctime;
     
-      curi->accounted_nested.rbytes += drbytes;
-      curi->accounted_nested.rfiles += drfiles;
-      curi->accounted_nested.rsubdirs += drsubdirs;
-      curi->accounted_nested.rctime = rctime;
+      curi->accounted_nested = curi->nested;
     } else {
       dout(10) << "predirty_nested no delta (remote dentry) in " << *parent << dendl;
       assert(!in->is_dir());
@@ -1340,6 +1347,7 @@ void Locker::predirty_nested(Mutation *mut, EMetaBlob *blob,
     cur = pin;
     curi = pi;
     parent = cur->get_projected_parent_dn()->get_dir();
+    linkunlink = 0;
     primary_dn = true;
     do_parent = false;
   }
index 38f732a98408b8702c1989448d9009e597d4b57e..ae274b69b9c64c263c1a91ec5b56b12cbc85af5f 100644 (file)
@@ -2758,7 +2758,6 @@ void Server::_unlink_local(MDRequest *mdr, CDentry *dn, CDentry *straydn)
   pi->nlink--;
   pi->ctime = mdr->now;
   pi->version = ipv;
-  pi->nested.zero();
   *ji = *pi;  // copy into journal
 
   // the unlinked dentry