From: Yan, Zheng Date: Fri, 19 Dec 2014 16:12:28 +0000 (+0800) Subject: mds: journal snaprealm for all types of inodes X-Git-Tag: v0.93~87^2~22 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4391cdd648e3ef4cb47742b050a631dc990dd22c;p=ceph.git mds: journal snaprealm for all types of inodes regular file also can has snaprealm. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 661213d4fbf6..d8fd4588ee05 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -86,12 +86,11 @@ public: { if (i.is_symlink()) symlink = sym; - if (i.is_dir()) { + if (i.is_dir()) dirfragtree = dft; - snapbl = sbl; - } if (oi) old_inodes = *oi; + snapbl = sbl; } fullbit(bufferlist::iterator &p) { decode(p); diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 51ac92c21da5..ace30bd27e8c 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -397,7 +397,7 @@ void EMetaBlob::update_segment(LogSegment *ls) // EMetaBlob::fullbit void EMetaBlob::fullbit::encode(bufferlist& bl) const { - ENCODE_START(6, 5, bl); + ENCODE_START(7, 5, bl); ::encode(dn, bl); ::encode(dnfirst, bl); ::encode(dnlast, bl); @@ -417,11 +417,13 @@ void EMetaBlob::fullbit::encode(bufferlist& bl) const { ::encode(true, bl); ::encode(old_inodes, bl); } + if (!inode.is_dir()) + ::encode(snapbl, bl); ENCODE_FINISH(bl); } void EMetaBlob::fullbit::decode(bufferlist::iterator &bl) { - DECODE_START_LEGACY_COMPAT_LEN(6, 5, 5, bl); + DECODE_START_LEGACY_COMPAT_LEN(7, 5, 5, bl); ::decode(dn, bl); ::decode(dnfirst, bl); ::decode(dnlast, bl); @@ -458,6 +460,10 @@ void EMetaBlob::fullbit::decode(bufferlist::iterator &bl) { ::decode(old_inodes, bl); } } + if (!inode.is_dir()) { + if (struct_v >= 7) + ::decode(snapbl, bl); + } DECODE_FINISH(bl); } @@ -538,17 +544,16 @@ void EMetaBlob::fullbit::update_inode(MDS *mds, CInode *in) } } } - - /* - * we can do this before linking hte inode bc the split_at would - * be a no-op.. we have no children (namely open snaprealms) to - * divy up - */ - in->decode_snap_blob(snapbl); } else if (in->inode.is_symlink()) { in->symlink = symlink; } in->old_inodes = old_inodes; + /* + * we can do this before linking hte inode bc the split_at would + * be a no-op.. we have no children (namely open snaprealms) to + * divy up + */ + in->decode_snap_blob(snapbl); } // EMetaBlob::remotebit