From: huanwen ren Date: Tue, 7 Jun 2016 03:07:42 +0000 (+0800) Subject: mds/cdir: fix the type of dentry in the judgment X-Git-Tag: v11.0.0~176^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8dc02f995758cc1b2f789d694c03a16303b415bf;p=ceph.git mds/cdir: fix the type of dentry in the judgment Perfect is_primary/is_remote/is_null type of dentry in the judgment Signed-off-by: huanwen ren --- diff --git a/src/mds/CDir.cc b/src/mds/CDir.cc index 3f47918c9ed8..a3725c4283d1 100644 --- a/src/mds/CDir.cc +++ b/src/mds/CDir.cc @@ -557,10 +557,10 @@ void CDir::link_inode_work( CDentry *dn, CInode *in) void CDir::unlink_inode(CDentry *dn) { - if (dn->get_linkage()->is_remote()) { - dout(12) << "unlink_inode " << *dn << dendl; - } else { + if (dn->get_linkage()->is_primary()) { dout(12) << "unlink_inode " << *dn << " " << *dn->get_linkage()->get_inode() << dendl; + } else { + dout(12) << "unlink_inode " << *dn << dendl; } unlink_inode_work(dn); @@ -608,10 +608,8 @@ void CDir::unlink_inode_work( CDentry *dn ) dn->unlink_remote(dn->get_linkage()); dn->get_linkage()->set_remote(0, 0); - } else { + } else if (dn->get_linkage()->is_primary()) { // primary - assert(dn->get_linkage()->is_primary()); - // unpin dentry? if (in->get_num_ref()) dn->put(CDentry::PIN_INODEPIN); @@ -623,6 +621,8 @@ void CDir::unlink_inode_work( CDentry *dn ) // detach inode in->remove_primary_parent(dn); dn->get_linkage()->inode = 0; + } else { + assert(!dn->get_linkage()->is_null()); } } @@ -2187,7 +2187,7 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl, bl.append('L'); // remote link ::encode(ino, bl); ::encode(d_type, bl); - } else { + } else if (dn->linkage.is_primary()) { // primary link CInode *in = dn->linkage.get_inode(); assert(in); @@ -2209,6 +2209,8 @@ void CDir::_encode_dentry(CDentry *dn, bufferlist& bl, bufferlist snap_blob; in->encode_snap_blob(snap_blob); in->encode_bare(bl, cache->mds->mdsmap->get_up_features(), &snap_blob); + } else { + assert(!dn->linkage.is_null()); } }