|
@@ -3809,6 +3809,7 @@ bad:
|
|
|
*/
|
|
|
void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
|
|
|
{
|
|
|
+ struct inode *inode;
|
|
|
struct ceph_inode_info *ci;
|
|
|
int flags = CHECK_CAPS_NODELAY;
|
|
|
|
|
@@ -3824,9 +3825,15 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
|
|
|
time_before(jiffies, ci->i_hold_caps_max))
|
|
|
break;
|
|
|
list_del_init(&ci->i_cap_delay_list);
|
|
|
+
|
|
|
+ inode = igrab(&ci->vfs_inode);
|
|
|
spin_unlock(&mdsc->cap_delay_lock);
|
|
|
- dout("check_delayed_caps on %p\n", &ci->vfs_inode);
|
|
|
- ceph_check_caps(ci, flags, NULL);
|
|
|
+
|
|
|
+ if (inode) {
|
|
|
+ dout("check_delayed_caps on %p\n", inode);
|
|
|
+ ceph_check_caps(ci, flags, NULL);
|
|
|
+ iput(inode);
|
|
|
+ }
|
|
|
}
|
|
|
spin_unlock(&mdsc->cap_delay_lock);
|
|
|
}
|