From: Yan, Zheng Date: Wed, 7 Jun 2017 01:17:42 +0000 (+0800) Subject: mds: don't mark nestlock dirty on improper inode X-Git-Tag: ses5-milestone7~3^2~7^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4f43737df882ce38d3977af2e82a0594f4c5bfe8;p=ceph.git mds: don't mark nestlock dirty on improper inode If inode is replica and it has no auth subtree dirfrag, We should not mark its nestlock dirty. Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 567668a12433..4e6af3e97cb5 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -339,11 +339,16 @@ void CInode::mark_dirty_rstat() dout(10) << "mark_dirty_rstat" << dendl; state_set(STATE_DIRTYRSTAT); get(PIN_DIRTYRSTAT); - CDentry *dn = get_projected_parent_dn(); - CDir *pdir = dn->dir; - pdir->dirty_rstat_inodes.push_back(&dirty_rstat_item); - - mdcache->mds->locker->mark_updated_scatterlock(&pdir->inode->nestlock); + CDentry *pdn = get_projected_parent_dn(); + if (pdn->is_auth()) { + CDir *pdir = pdn->dir; + pdir->dirty_rstat_inodes.push_back(&dirty_rstat_item); + mdcache->mds->locker->mark_updated_scatterlock(&pdir->inode->nestlock); + } else { + // under cross-MDS rename. + // DIRTYRSTAT flag will get cleared when rename finishes + assert(state_test(STATE_AMBIGUOUSAUTH)); + } } } void CInode::clear_dirty_rstat()