From 5b7c5c34f47b71afae30e4e4df9fdab1b2aa3988 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 3 Apr 2009 15:03:37 -0700 Subject: [PATCH] kclient: grab inode before queue_cap_snap; cleanup --- src/kernel/inode.c | 2 -- src/kernel/snap.c | 7 ++++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/kernel/inode.c b/src/kernel/inode.c index 6f23f361655ea..4d4e54be92d92 100644 --- a/src/kernel/inode.c +++ b/src/kernel/inode.c @@ -301,8 +301,6 @@ struct inode *ceph_alloc_inode(struct super_block *sb) ci->i_snap_realm = NULL; INIT_LIST_HEAD(&ci->i_snap_realm_item); INIT_LIST_HEAD(&ci->i_snap_flush_item); -#warning remove me - ci->i_snap_realm_counter = 0; INIT_WORK(&ci->i_wb_work, ceph_inode_writeback); INIT_WORK(&ci->i_pg_inv_work, ceph_inode_invalidate_pages); diff --git a/src/kernel/snap.c b/src/kernel/snap.c index c184f49d88d24..d2847d5c88266 100644 --- a/src/kernel/snap.c +++ b/src/kernel/snap.c @@ -566,13 +566,18 @@ more: */ if (!deletion) { struct list_head *pi; + struct inode *inode; spin_lock(&realm->inodes_with_caps_lock); list_for_each(pi, &realm->inodes_with_caps) { struct ceph_inode_info *ci = list_entry(pi, struct ceph_inode_info, i_snap_realm_item); + inode = igrab(&ci->vfs_inode); spin_unlock(&realm->inodes_with_caps_lock); - ceph_queue_cap_snap(ci, realm->cached_context); + if (inode) { + ceph_queue_cap_snap(ci, realm->cached_context); + iput(inode); + } spin_lock(&realm->inodes_with_caps_lock); } spin_unlock(&realm->inodes_with_caps_lock); -- 2.39.5