From: Sage Weil Date: Wed, 4 Nov 2009 23:22:11 +0000 (-0800) Subject: mds: use fnode when replaying journal X-Git-Tag: v0.18~128^2~36 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ee7affe5ebe64e75849b2cf32c8fa09e687660ea;p=ceph.git mds: use fnode when replaying journal We weren't actually pulling the fnode from the journal. I'm surprised anything worked. This fixes a crash when untaring, restarting mds, and then rm -r'ing the dir. Previously the rstat would roll negative and assert. --- diff --git a/src/TODO b/src/TODO index 4beb239d53b4..e9fc740b26c2 100644 --- a/src/TODO +++ b/src/TODO @@ -64,7 +64,6 @@ bugs - mislinked directory? - premature filejournal trimming? - weird osd_lock contention during osd restart? -- rstat corruption on kernal untar, make, rm -f (maybe due to mds restart?) greg - osd: use client session to control osdmaps to clients (auth branch) diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 2359ec812f65..95345d189b08 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -102,8 +102,17 @@ ostream& operator<<(ostream& out, CDir& dir) << "=" << dir.fnode.fragstat.nfiles << "+" << dir.fnode.fragstat.nsubdirs; out << " rb=" << dir.fnode.rstat.rbytes << "/" << dir.fnode.accounted_rstat.rbytes; + if (dir.is_projected()) + out << "|" << dir.get_projected_fnode()->rstat.rbytes + << "/" << dir.get_projected_fnode()->accounted_rstat.rbytes; out << " rf=" << dir.fnode.rstat.rfiles << "/" << dir.fnode.accounted_rstat.rfiles; + if (dir.is_projected()) + out << "|" << dir.get_projected_fnode()->rstat.rfiles + << "/" << dir.get_projected_fnode()->accounted_rstat.rfiles; out << " rd=" << dir.fnode.rstat.rsubdirs << "/" << dir.fnode.accounted_rstat.rsubdirs; + if (dir.is_projected()) + out << "|" << dir.get_projected_fnode()->rstat.rsubdirs + << "/" << dir.get_projected_fnode()->accounted_rstat.rsubdirs; out << " hs=" << dir.get_num_head_items() << "+" << dir.get_num_head_null(); out << ",ss=" << dir.get_num_snap_items() << "+" << dir.get_num_snap_null(); diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 4112be7202e4..fc7c915f66b8 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -395,6 +395,7 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) dout(10) << "EMetaBlob.replay added dir " << *dir << dendl; } dir->set_version( lump.fnode.version ); + dir->fnode = lump.fnode; if (lump.is_dirty()) { dir->_mark_dirty(logseg);