From 5e29aba193e05373413deffcd05c6b61100075bb Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 16 Apr 2008 07:44:51 -0700 Subject: [PATCH] kclient: fix cap delayed_work inode refcounting --- src/kernel/inode.c | 11 ++++------- src/kernel/super.c | 3 +-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 065815aae45a9..28de8e38f8b45 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -766,9 +766,8 @@ void ceph_cap_delayed_work(struct work_struct *work) spin_lock(&ci->vfs_inode.i_lock); if (ci->i_hold_caps_until > jiffies) { dout(-10, "cap_dwork on %p -- rescheduling\n", &ci->vfs_inode); - if (schedule_delayed_work(&ci->i_cap_dwork, - ci->i_hold_caps_until - jiffies)) - igrab(&ci->vfs_inode); + schedule_delayed_work(&ci->i_cap_dwork, + ci->i_hold_caps_until - jiffies); spin_unlock(&ci->vfs_inode.i_lock); goto out; } @@ -776,7 +775,6 @@ void ceph_cap_delayed_work(struct work_struct *work) spin_unlock(&ci->vfs_inode.i_lock); ceph_check_caps(ci, 0); out: - iput(&ci->vfs_inode); dout(-10, "cap_dwork on %p done\n", &ci->vfs_inode); } @@ -812,9 +810,8 @@ retry: if (until > ci->i_hold_caps_until) { ci->i_hold_caps_until = until; dout(10, "hold_caps_until %lu\n", until); - if (schedule_delayed_work(&ci->i_cap_dwork, - until - jiffies)) - igrab(inode); + schedule_delayed_work(&ci->i_cap_dwork, + until - jiffies); } } diff --git a/src/kernel/super.c b/src/kernel/super.c index 0627352302e03..379aadda961e5 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -164,8 +164,7 @@ static void ceph_destroy_inode(struct inode *inode) { struct ceph_inode_info *ci = ceph_inode(inode); dout(-30, "destroy_inode %p ino %llx\n", inode, ceph_ino(inode)); - if (cancel_delayed_work_sync(&ci->i_cap_dwork)) - iput(inode); + cancel_delayed_work_sync(&ci->i_cap_dwork); kfree(ci->i_symlink); kmem_cache_free(ceph_inode_cachep, ci); } -- 2.39.5