]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: fix inode->frag rstat projected with snaps
authorSage Weil <sage@newdream.net>
Wed, 10 Nov 2010 17:43:56 +0000 (09:43 -0800)
committerSage Weil <sage@newdream.net>
Wed, 10 Nov 2010 17:43:56 +0000 (09:43 -0800)
The snapid 'first' value needs to be >= inode->first; move that into
the helper.

Signed-off-by: Sage Weil <sage@newdream.net>
src/mds/MDCache.cc
src/mds/MDCache.h

index e464562ef0ad3796209db2f8701a6c04774ac874..5265a1d047d7649aacb637fbe3547cfa9cdb6b04 100644 (file)
@@ -1433,6 +1433,11 @@ void MDCache::project_rstat_inode_to_frag(CInode *cur, CDir *parent, snapid_t fi
   CDentry *parentdn = cur->get_projected_parent_dn();
   inode_t *curi = cur->get_projected_inode();
 
+  if (cur->first > first)
+    first = cur->first;
+
+  dout(10) << "projected_rstat_inode_to_frag first " << first << " linkunlink " << linkunlink
+          << " " << *cur << dendl;
   dout(20) << "    frag head is [" << parent->first << ",head] " << dendl;
   dout(20) << " inode update is [" << first << "," << cur->last << "]" << dendl;
 
@@ -1445,23 +1450,23 @@ void MDCache::project_rstat_inode_to_frag(CInode *cur, CDir *parent, snapid_t fi
   dout(20) << " floor of " << floor << " from parent dn " << *parentdn << dendl;
 
   if (cur->last >= floor)
-    project_rstat_inode_to_frag(*curi, MAX(first, floor), cur->last, parent, linkunlink);
+    _project_rstat_inode_to_frag(*curi, MAX(first, floor), cur->last, parent, linkunlink);
       
   for (set<snapid_t>::iterator p = cur->dirty_old_rstats.begin();
        p != cur->dirty_old_rstats.end();
        p++) {
     old_inode_t& old = cur->old_inodes[*p];
     if (*p >= floor)
-      project_rstat_inode_to_frag(old.inode, MAX(old.first, floor), *p, parent);
+      _project_rstat_inode_to_frag(old.inode, MAX(old.first, floor), *p, parent);
   }
   cur->dirty_old_rstats.clear();
 }
 
 
-void MDCache::project_rstat_inode_to_frag(inode_t& inode, snapid_t ofirst, snapid_t last,
+void MDCache::_project_rstat_inode_to_frag(inode_t& inode, snapid_t ofirst, snapid_t last,
                                          CDir *parent, int linkunlink)
 {
-  dout(10) << "project_rstat_inode_to_frag [" << ofirst << "," << last << "]" << dendl;
+  dout(10) << "_project_rstat_inode_to_frag [" << ofirst << "," << last << "]" << dendl;
   dout(20) << "  inode           rstat " << inode.rstat << dendl;
   dout(20) << "  inode accounted_rstat " << inode.accounted_rstat << dendl;
   nest_info_t delta;
@@ -1782,8 +1787,6 @@ void MDCache::predirty_journal_parents(Mutation *mut, EMetaBlob *blob,
        follows = prealm->get_newest_seq();
       
       snapid_t first = follows+1;
-      if (cur->first > first)
-       first = cur->first;
 
       // first, if the frag is stale, bring it back in sync.
       parent->resync_accounted_rstat();
index f44e19b3da1f0c7360fbe3bffe1d44bc64636466..38b6d1a8fb231219bc4aa7a68baf2f0889978b6c 100644 (file)
@@ -577,8 +577,8 @@ public:
   inode_t *journal_dirty_inode(Mutation *mut, EMetaBlob *metablob, CInode *in, snapid_t follows=CEPH_NOSNAP);
 
   void project_rstat_inode_to_frag(CInode *cur, CDir *parent, snapid_t first, int linkunlink);
-  void project_rstat_inode_to_frag(inode_t& inode, snapid_t ofirst, snapid_t last,
-                                  CDir *parent, int linkunlink=0);
+  void _project_rstat_inode_to_frag(inode_t& inode, snapid_t ofirst, snapid_t last,
+                                   CDir *parent, int linkunlink=0);
   void project_rstat_frag_to_inode(nest_info_t& rstat, nest_info_t& accounted_rstat,
                                   snapid_t ofirst, snapid_t last, 
                                   CInode *pin, bool cow_head);