From: Yan, Zheng Date: Tue, 2 Oct 2012 08:55:49 +0000 (+0800) Subject: mds: Properly update dirty dir fragstat during log replay X-Git-Tag: v0.54~124^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2861d9a020b81682d2636412a21d200499ef502;p=ceph.git mds: Properly update dirty dir fragstat during log replay Dirty dir fragstat is managed by filelock instead of nestlock. Signed-off-by: Yan, Zheng --- diff --git a/src/mds/journal.cc b/src/mds/journal.cc index 38f8c0e78219..0de3f397f46b 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -488,14 +488,20 @@ void EMetaBlob::replay(MDS *mds, LogSegment *logseg) dir->get_inode()->filelock.mark_dirty(); dir->get_inode()->nestlock.mark_dirty(); - if (!(dir->fnode.rstat == dir->fnode.accounted_rstat) || - !(dir->fnode.fragstat == dir->fnode.accounted_fragstat)) { + if (!(dir->fnode.rstat == dir->fnode.accounted_rstat)) { dout(10) << "EMetaBlob.replay dirty nestinfo on " << *dir << dendl; mds->locker->mark_updated_scatterlock(&dir->inode->nestlock); logseg->dirty_dirfrag_nest.push_back(&dir->inode->item_dirty_dirfrag_nest); } else { dout(10) << "EMetaBlob.replay clean nestinfo on " << *dir << dendl; } + if (!(dir->fnode.fragstat == dir->fnode.accounted_fragstat)) { + dout(10) << "EMetaBlob.replay dirty fragstat on " << *dir << dendl; + mds->locker->mark_updated_scatterlock(&dir->inode->filelock); + logseg->dirty_dirfrag_dir.push_back(&dir->inode->item_dirty_dirfrag_dir); + } else { + dout(10) << "EMetaBlob.replay clean fragstat on " << *dir << dendl; + } } if (lump.is_new()) dir->mark_new(logseg);