]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: move dirty rstat inodes to new dir on refragment
authorSage Weil <sage@newdream.net>
Wed, 17 Nov 2010 17:19:39 +0000 (09:19 -0800)
committerSage Weil <sage@newdream.net>
Wed, 17 Nov 2010 21:06:02 +0000 (13:06 -0800)
Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/CDir.cc

index 3a1e446f2faaf17fe741ce426369f0ff7da2e117..0778d8e8d395d2f44f8fbcbc96d8583b667fd553 100644 (file)
@@ -604,7 +604,8 @@ void CDir::steal_dentry(CDentry *dn)
       num_snap_items++;
 
     if (dn->get_linkage()->is_primary()) {
-      inode_t *pi = dn->get_linkage()->get_inode()->get_projected_inode();
+      CInode *in = dn->get_linkage()->get_inode();
+      inode_t *pi = in->get_projected_inode();
       if (dn->get_linkage()->get_inode()->is_dir())
        fnode.fragstat.nsubdirs++;
       else
@@ -616,6 +617,10 @@ void CDir::steal_dentry(CDentry *dn)
       fnode.rstat.rsnaprealms += pi->accounted_rstat.ranchors;
       if (pi->accounted_rstat.rctime > fnode.rstat.rctime)
        fnode.rstat.rctime = pi->accounted_rstat.rctime;
+
+      // move dirty inode rstat to new dirfrag
+      if (in->is_dirty_rstat())
+       dirty_rstat_inodes.push_back(&in->dirty_rstat_item);
     } else if (dn->get_linkage()->is_remote()) {
       if (dn->get_linkage()->get_remote_d_type() == (S_IFDIR >> 12))
        fnode.fragstat.nsubdirs++;