]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: conclude -ENOENT when there is null dentry 4177/head
authorYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 08:17:44 +0000 (16:17 +0800)
committerYan, Zheng <zyan@redhat.com>
Wed, 25 Mar 2015 10:20:39 +0000 (18:20 +0800)
Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/client/Client.cc

index 1927de52931ce0ef30a50044899d7cd828e62d86..9e99fd099daf29c0c36ffcb5bdc2413a8714f00f 100644 (file)
@@ -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;