ceph: avoid accessing freeing inode in ceph_check_delayed_caps()
Signed-off-by: "Yan, Zheng" <zyan@redhat.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
This commit is contained in:
parent
62a65f36d0
commit
4b9f2042fd
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user