From: Sage Weil Date: Mon, 7 Apr 2008 22:08:24 +0000 (-0700) Subject: kclient: fix d_move invocation (reuse old_dentry) X-Git-Tag: v0.3~239^2~81^2^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a411d751c60e0de298c701524ece98427831bfb8;p=ceph.git kclient: fix d_move invocation (reuse old_dentry) --- diff --git a/src/kernel/dir.c b/src/kernel/dir.c index ea7df234633a..7689bf743165 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -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; } diff --git a/src/kernel/inode.c b/src/kernel/inode.c index c590dc8959f4..85008ec6a693 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -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];