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);
*/
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);