]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: do not return new null dentry from lookup
authorSage Weil <sage@newdream.net>
Tue, 3 Mar 2009 19:43:47 +0000 (11:43 -0800)
committerSage Weil <sage@newdream.net>
Tue, 3 Mar 2009 19:43:47 +0000 (11:43 -0800)
The VFS doesn't appear to like it when lookup returns a replacement
dentry that is null... it BUGs on unmount with a ref count that is
still 1.

So, if we get ENOENT and no trace, return ERR_PTR(-ENOENT) instead.

src/kernel/dir.c

index 918f933eec901774fc19a580469824a4c42a0b6b..a8adf784f9b23a9061c61ee74d3a9e997f2efc7d 100644 (file)
@@ -243,20 +243,18 @@ struct dentry *ceph_finish_lookup(struct ceph_mds_request *req,
 
        if (err == -ENOENT) {
                /* no trace? */
+               err = 0;
                if (req->r_reply_info.trace_numd == 0) {
                        dout(20, "ENOENT and no trace, dentry %p inode %p\n",
                             dentry, dentry->d_inode);
                        ceph_init_dentry(dentry);
                        if (dentry->d_inode) {
                                d_drop(dentry);
-                               req->r_dentry = d_alloc(dentry->d_parent,
-                                                       &dentry->d_name);
-                               d_rehash(req->r_dentry);
+                               err = -ENOENT;
                        } else {
                                d_add(dentry, NULL);
                        }
                }
-               err = 0;
        }
        if (err)
                dentry = ERR_PTR(err);