]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: properly journal root inode's snaprealm 22320/head
authorYan, Zheng <zyan@redhat.com>
Wed, 30 May 2018 11:26:09 +0000 (19:26 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 30 May 2018 11:27:10 +0000 (19:27 +0800)
Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
Fixes: http://tracker.ceph.com/issues/24343
src/mds/MDCache.cc
src/mds/events/EMetaBlob.h

index 810edeb5d1331b17d1cc9cc6e6c0110a974f2e76..43628c36655eefe9db747f59780c0fa869a27f8b 100644 (file)
@@ -1735,7 +1735,7 @@ void MDCache::journal_cow_inode(MutationRef& mut, EMetaBlob *metablob,
 void MDCache::journal_dirty_inode(MutationImpl *mut, EMetaBlob *metablob, CInode *in, snapid_t follows)
 {
   if (in->is_base()) {
-    metablob->add_root(true, in, in->get_projected_inode());
+    metablob->add_root(true, in);
   } else {
     if (follows == CEPH_NOSNAP && in->last != CEPH_NOSNAP)
       follows = in->first - 1;
@@ -12665,7 +12665,7 @@ void MDCache::upgrade_inode_snaprealm_work(MDRequestRef& mdr)
   mds->mdlog->start_entry(le);
 
   if (in->is_base()) {
-    le->metablob.add_root(true, in, in->get_projected_inode());
+    le->metablob.add_root(true, in);
   } else {
     CDentry *pdn = in->get_projected_parent_dn();
     le->metablob.add_dir_context(pdn->get_dir());
index 94ff9899e00ee7352d08c4d26d28aa9b40ae7905..9afa3f69a1ca073d8f0468e89aa6855563a11ce0 100644 (file)
@@ -493,20 +493,18 @@ private:
     add_primary_dentry(dn, 0, dirty, dirty_parent, dirty_pool);
   }
 
-  void add_root(bool dirty, CInode *in, const CInode::mempool_inode *pi=0, fragtree_t *pdft=0, bufferlist *psnapbl=0,
-                   CInode::mempool_xattr_map *px=0) {
+  void add_root(bool dirty, CInode *in) {
     in->last_journaled = event_seq;
     //cout << "journaling " << in->inode.ino << " at " << my_offset << std::endl;
 
-    if (!pi) pi = in->get_projected_inode();
-    if (!pdft) pdft = &in->dirfragtree;
-    if (!px) px = in->get_projected_xattrs();
+    const auto& pi = *(in->get_projected_inode());
+    const auto& pdft = in->dirfragtree;
+    const auto& px = *(in->get_projected_xattrs());
 
     bufferlist snapbl;
-    if (psnapbl)
-      snapbl = *psnapbl;
-    else
-      in->encode_snap_blob(snapbl);
+    const sr_t *sr = in->get_projected_srnode();
+    if (sr)
+      sr->encode(snapbl);
 
     for (list<ceph::shared_ptr<fullbit> >::iterator p = roots.begin(); p != roots.end(); ++p) {
       if ((*p)->inode.ino == in->ino()) {
@@ -516,8 +514,8 @@ private:
     }
 
     string empty;
-    roots.push_back(ceph::shared_ptr<fullbit>(new fullbit(empty, in->first, in->last, 0, *pi,
-                                                         *pdft, *px, in->symlink,
+    roots.push_back(ceph::shared_ptr<fullbit>(new fullbit(empty, in->first, in->last, 0, pi,
+                                                         pdft, px, in->symlink,
                                                          in->oldest_snap, snapbl,
                                                          dirty ? fullbit::STATE_DIRTY : 0,
                                                          &in->old_inodes)));