From: Sage Weil Date: Tue, 5 Oct 2010 18:17:21 +0000 (-0700) Subject: mds: use helper to update inode from EMetaBlob during replay X-Git-Tag: v0.22~57 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=09b2db7368647089f9ec553962205b9e788cad5a;p=ceph.git mds: use helper to update inode from EMetaBlob during replay Removes 3 copies of this code. Signed-off-by: Sage Weil --- diff --git a/src/mds/events/EMetaBlob.h b/src/mds/events/EMetaBlob.h index 205a80880711..13c4a1bba9d7 100644 --- a/src/mds/events/EMetaBlob.h +++ b/src/mds/events/EMetaBlob.h @@ -129,6 +129,25 @@ public: } ::decode(dirty, bl); } + + void update_inode(CInode *in) { + in->inode = inode; + in->xattrs = xattrs; + if (in->inode.is_dir()) { + in->dirfragtree = dirfragtree; + delete in->default_layout; + in->default_layout = dir_layout; + /* + * 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; + } + } + void print(ostream& out) { out << " fullbit dn " << dn << " [" << dnfirst << "," << dnlast << "] dnv " << dnv << " inode " << inode.ino diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 5cb14337d931..7528e68bb724 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -369,20 +369,7 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) bool isnew = in ? false:true; if (!in) in = new CInode(mds->mdcache, true); - in->inode = root->inode; - in->xattrs = root->xattrs; - if (in->inode.is_dir()) { - in->dirfragtree = root->dirfragtree; - delete in->default_layout; - in->default_layout = root->dir_layout; - /* - * 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(root->snapbl); - } - if (in->inode.is_symlink()) in->symlink = root->symlink; + root->update_inode(in); if (isnew) mds->mdcache->add_inode(in); if (root->dirty) in->_mark_dirty(logseg); @@ -467,20 +454,7 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) CInode *in = mds->mdcache->get_inode(p->inode.ino, p->dnlast); if (!in) { in = new CInode(mds->mdcache, true, p->dnfirst, p->dnlast); - in->inode = p->inode; - in->xattrs = p->xattrs; - if (in->inode.is_dir()) { - in->dirfragtree = p->dirfragtree; - delete in->default_layout; - in->default_layout = p->dir_layout; - /* - * 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(p->snapbl); - } - if (in->inode.is_symlink()) in->symlink = p->symlink; + p->update_inode(in); mds->mdcache->add_inode(in); if (!dn->get_linkage()->is_null()) { if (dn->get_linkage()->is_primary()) { @@ -507,15 +481,7 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) } if (in->get_parent_dn() && in->inode.anchored != p->inode.anchored) in->get_parent_dn()->adjust_nested_anchors( (int)p->inode.anchored - (int)in->inode.anchored ); - in->inode = p->inode; - in->xattrs = p->xattrs; - if (in->inode.is_dir()) { - in->dirfragtree = p->dirfragtree; - delete in->default_layout; - in->default_layout = p->dir_layout; - in->decode_snap_blob(p->snapbl); - } - if (in->inode.is_symlink()) in->symlink = p->symlink; + p->update_inode(in); if (p->dirty) in->_mark_dirty(logseg); if (dn->get_linkage()->get_inode() != in) { if (!dn->get_linkage()->is_null()) // note: might be remote. as with stray reintegration.