]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix d_move invocation (reuse old_dentry)
authorSage Weil <sage@newdream.net>
Mon, 7 Apr 2008 22:08:24 +0000 (15:08 -0700)
committerSage Weil <sage@newdream.net>
Mon, 7 Apr 2008 22:08:24 +0000 (15:08 -0700)
src/kernel/dir.c
src/kernel/inode.c

index ea7df234633ad52219cf79c2c5f8ac524e57c7e6..7689bf7431650a6bd6a8d223c6cb961e53134b3c 100644 (file)
@@ -512,16 +512,16 @@ static int ceph_dentry_revalidate(struct dentry *dentry, struct nameidata *nd)
        struct inode *dir = dentry->d_parent->d_inode;
 
        if (ceph_inode_lease_valid(dir, CEPH_LOCK_ICONTENT)) {
-               dout(20, "dentry_revalidate have ICONTENT on dir inode %p\n",
-                    dir);
+               dout(20, "dentry_revalidate %p have ICONTENT on dir inode %p\n",
+                    dentry, dir);
                return 1;
        }
        if (ceph_dentry_lease_valid(dentry)) {
-               dout(20, "dentry_revalidate - dentry %p lease valid\n", dentry);
+               dout(20, "dentry_revalidate %p lease valid\n", dentry);
                return 1;
        }
 
-       dout(20, "dentry_revalidate - dentry %p expired\n", dentry);
+       dout(20, "dentry_revalidate %p no lease\n", dentry);
        d_drop(dentry);
        return 0;
 }
index c590dc8959f43152ae19c4f8c05b5c02c7879fda..85008ec6a6932a1ca30ac30eda3d292b7b751981 100644 (file)
@@ -446,6 +446,9 @@ int ceph_fill_trace(struct super_block *sb, struct ceph_mds_request *req,
                                dout(10, "fill_trace doing d_move %p -> %p\n",
                                     req->r_old_dentry, dn);
                                d_move(req->r_old_dentry, dn);
+                               dput(dn);  /* dn is dropped */
+                               dn = req->r_old_dentry;  /* use old_dentry */
+                               req->r_old_dentry = 0;
                        }
                } else {
                        dname.name = rinfo->trace_dname[d];