From d081424f5cb933f208870f8e7fbcdfe77e36fb97 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 16 Jun 2008 07:41:30 -0700 Subject: [PATCH] kclient: debugging d_drop --- src/kernel/dir.c | 23 ++++++++++++++++++----- src/kernel/inode.c | 4 +++- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/kernel/dir.c b/src/kernel/dir.c index df63a3ebf2219..503b685220c07 100644 --- a/src/kernel/dir.c +++ b/src/kernel/dir.c @@ -280,6 +280,7 @@ struct dentry *ceph_do_lookup(struct super_block *sb, struct dentry *dentry, dentry, dentry->d_inode); ceph_init_dentry(dentry); if (dentry->d_inode) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); req->r_last_dentry = d_alloc(dentry->d_parent, &dentry->d_name); @@ -339,6 +340,7 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry, dentry, USE_AUTH_MDS); kfree(path); if (IS_ERR(req)) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); return PTR_ERR(req); } @@ -360,8 +362,10 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry, } } ceph_mdsc_put_request(req); - if (err) + if (err) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); + } return err; } @@ -402,14 +406,17 @@ static int ceph_symlink(struct inode *dir, struct dentry *dentry, dentry, USE_AUTH_MDS); kfree(path); if (IS_ERR(req)) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); return PTR_ERR(req); } ceph_mdsc_lease_release(mdsc, dir, 0, CEPH_LOCK_ICONTENT); err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); - if (err) + if (err) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); + } return err; } @@ -433,6 +440,7 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, int mode) dentry, USE_AUTH_MDS); kfree(path); if (IS_ERR(req)) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); return PTR_ERR(req); } @@ -441,8 +449,10 @@ static int ceph_mkdir(struct inode *dir, struct dentry *dentry, int mode) rhead->args.mkdir.mode = cpu_to_le32(mode); err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); - if (err < 0) + if (err < 0) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); + } return err; } @@ -475,6 +485,7 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir, kfree(oldpath); kfree(path); if (IS_ERR(req)) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); return PTR_ERR(req); } @@ -485,9 +496,10 @@ static int ceph_link(struct dentry *old_dentry, struct inode *dir, ceph_mdsc_lease_release(mdsc, dir, 0, CEPH_LOCK_ICONTENT); err = ceph_mdsc_do_request(mdsc, req); ceph_mdsc_put_request(req); - if (err) + if (err) { + dout(40, "d_drop %p\n", dentry); d_drop(dentry); - else if (req->r_reply_info.trace_numd == 0) { + } else if (req->r_reply_info.trace_numd == 0) { /* no trace */ struct inode *inode = old_dentry->d_inode; inc_nlink(inode); @@ -612,6 +624,7 @@ static int ceph_dentry_revalidate(struct dentry *dentry, struct nameidata *nd) } dout(20, "dentry_revalidate %p no lease\n", dentry); + dout(40, "d_drop %p\n", dentry); d_drop(dentry); return 0; } diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 0029f0961d4ac..a489a688a828e 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -901,8 +901,10 @@ retry_lookup: d_delete(dn); return -1; } - if (!d_unhashed(dn)) + if (!d_unhashed(dn)) { + dout(40, "d_drop %p\n", dn); d_drop(dn); + } new = d_splice_alias(in, dn); if (new) dn = new; -- 2.39.5