]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: fix open_parent addition in rename
authorSage Weil <sage@newdream.net>
Sun, 3 Aug 2008 22:04:51 +0000 (15:04 -0700)
committerSage Weil <sage@newdream.net>
Sun, 3 Aug 2008 22:11:45 +0000 (15:11 -0700)
src/mds/Server.cc
src/mds/snap.cc
src/mds/snap.h

index bd4f6a6e06a28f2ebce4dfd23e09beba1b9ccfd6..482d2a3d794d6bfaf8a8bbc0dd219a10148f5319 100644 (file)
@@ -3837,7 +3837,7 @@ void Server::_rename_apply(MDRequest *mdr, CDentry *srcdn, CDentry *destdn, CDen
        SnapRealm *oldparent = srcdn->dir->inode->find_snaprealm();
        realm->past_parents[oldlast].ino = oldparent->inode->ino();
        realm->past_parents[oldlast].first = realm->current_parent_since;
-       realm->open_past_parents[srcdn->dir->inode->ino()] = oldparent;
+       realm->add_open_past_parent(oldparent);
        dout(10) << " adding past_parent [" << realm->past_parents[oldlast].first << "," << oldlast << "] = "
                 << realm->past_parents[oldlast].ino << " on " << *realm << dendl;
       }
index bd528678ed4524381e5223c71b8e053b30fdfc74..cfd08bfaf5291171f90e34a68d7734428e1c1e3b 100644 (file)
                                                  << ".cache.snaprealm(" << inode->ino() \
                                                  << " seq " << seq << " " << this << ") "
 
+void SnapRealm::add_open_past_parent(SnapRealm *parent)
+{
+  open_past_parents[parent->inode->ino()] = parent;
+  parent->inode->get(CInode::PIN_PASTSNAPPARENT);
+}
+
 bool SnapRealm::_open_parents(Context *finish, snapid_t first, snapid_t last)
 {
   dout(10) << "open_parents [" << first << "," << last << "]" << dendl;
@@ -57,8 +63,7 @@ bool SnapRealm::_open_parents(Context *finish, snapid_t first, snapid_t last)
       }
       assert(parent->snaprealm);  // hmm!
       if (!open_past_parents.count(p->second.ino)) {
-       open_past_parents[p->second.ino] = parent->snaprealm;
-       parent->get(CInode::PIN_PASTSNAPPARENT);
+       add_open_past_parent(parent->snaprealm);
       }
       if (!parent->snaprealm->_open_parents(finish, p->second.first, p->first))
        return false;
index cf10645f41930410f40a641b336008fa454ecba9..928905181ff43a0f8822bb2667a04064fe0d3a6a 100644 (file)
@@ -152,6 +152,7 @@ struct SnapRealm {
     return true;
   }
   bool have_past_parents_open(snapid_t first=1, snapid_t last=CEPH_NOSNAP);
+  void add_open_past_parent(SnapRealm *parent);
   void close_parents();
 
   void build_snap_set(set<snapid_t>& s,