From 89fd137fb406fd9f83fd737be5b1083d36b5e029 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Wed, 25 Mar 2015 16:17:44 +0800 Subject: [PATCH] client: conclude -ENOENT when there is null dentry Signed-off-by: Yan, Zheng --- src/client/Client.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 1927de52931c..9e99fd099daf 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; -- 2.47.3