From: Yan, Zheng Date: Wed, 25 Mar 2015 08:17:44 +0000 (+0800) Subject: client: conclude -ENOENT when there is null dentry X-Git-Tag: v9.0.0~75^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=89fd137fb406fd9f83fd737be5b1083d36b5e029;p=ceph.git client: conclude -ENOENT when there is null dentry Signed-off-by: Yan, Zheng --- diff --git a/src/client/Client.cc b/src/client/Client.cc index 1927de52931..9e99fd099da 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -4991,9 +4991,14 @@ int Client::_lookup(Inode *dir, const string& dname, Inode **target) << " vs lease_gen " << dn->lease_gen << dendl; } // dir lease? - if (dir->caps_issued_mask(CEPH_CAP_FILE_SHARED) && - dn->cap_shared_gen == dir->shared_gen) { - goto hit_dn; + if (dir->caps_issued_mask(CEPH_CAP_FILE_SHARED)) { + if (dn->cap_shared_gen == dir->shared_gen) + goto hit_dn; + if (!dn->inode && (dir->flags & I_COMPLETE)) { + ldout(cct, 10) << "_lookup concluded ENOENT locally for " + << *dir << " dn '" << dname << "'" << dendl; + return -ENOENT; + } } } else { ldout(cct, 20) << " no cap on " << dn->inode->vino() << dendl;