Commit 4b9f2042 authored by Yan, Zheng's avatar Yan, Zheng Committed by Ilya Dryomov

ceph: avoid accessing freeing inode in ceph_check_delayed_caps()

Signed-off-by: default avatar"Yan, Zheng" <zyan@redhat.com>
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
parent 62a65f36
...@@ -3809,6 +3809,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, ...@@ -3809,6 +3809,7 @@ void ceph_handle_caps(struct ceph_mds_session *session,
*/ */
void ceph_check_delayed_caps(struct ceph_mds_client *mdsc) void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
{ {
struct inode *inode;
struct ceph_inode_info *ci; struct ceph_inode_info *ci;
int flags = CHECK_CAPS_NODELAY; int flags = CHECK_CAPS_NODELAY;
...@@ -3824,9 +3825,15 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc) ...@@ -3824,9 +3825,15 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc)
time_before(jiffies, ci->i_hold_caps_max)) time_before(jiffies, ci->i_hold_caps_max))
break; break;
list_del_init(&ci->i_cap_delay_list); list_del_init(&ci->i_cap_delay_list);
inode = igrab(&ci->vfs_inode);
spin_unlock(&mdsc->cap_delay_lock); 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); spin_unlock(&mdsc->cap_delay_lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment