From: Yan, Zheng Date: Tue, 27 Jun 2017 09:17:24 +0000 (+0800) Subject: ceph: avoid accessing freeing inode in ceph_check_delayed_caps() X-Git-Tag: v4.13-rc1~58^2~35 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b9f2042fd2a9da7e6c7b4dd49eff19dc3754e4f;p=platform%2Fkernel%2Flinux-exynos.git ceph: avoid accessing freeing inode in ceph_check_delayed_caps() Signed-off-by: "Yan, Zheng" Signed-off-by: Ilya Dryomov --- diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index f555245..7007ae2 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c @@ -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); }