From 55a29c5224ae8269654289b8f5b6e0b5ba05d3d8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 10 Nov 2009 16:26:44 -0800 Subject: [PATCH] mds: underwater is function of _loaded_ version, not in core version We may load a dir version off disk that is older than the in-core version (because we got newer data from the journal, say). When marking underwater items clean, do so based on the _loaded_ version, not out in-core version. --- src/mds/CDir.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index f19face696dc7..05ad08d255b50 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -1296,13 +1296,13 @@ void CDir::_fetched(bufferlist &bl) */ if (committed_version == 0 && dn && - dn->get_version() <= fnode.version && + dn->get_version() <= got_fnode.version && dn->is_dirty()) { dout(10) << "_fetched had underwater dentry " << *dn << ", marking clean" << dendl; dn->mark_clean(); if (dn->get_linkage()->get_inode()) { - assert(dn->get_linkage()->get_inode()->get_version() <= fnode.version); + assert(dn->get_linkage()->get_inode()->get_version() <= got_fnode.version); dout(10) << "_fetched had underwater inode " << *dn->get_linkage()->get_inode() << ", marking clean" << dendl; dn->get_linkage()->get_inode()->mark_clean(); } -- 2.39.5