diff options
author | Yan, Zheng <zyan@redhat.com> | 2017-06-27 05:17:24 -0400 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2017-07-07 11:25:13 -0400 |
commit | 4b9f2042fd2a9da7e6c7b4dd49eff19dc3754e4f (patch) | |
tree | 7856299e8f18a048896874a063a9e40131957f7a /fs/ceph/caps.c | |
parent | 62a65f36d016fff32179acdbfcb8b2d8d9e54757 (diff) |
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>
Diffstat (limited to 'fs/ceph/caps.c')
-rw-r--r-- | fs/ceph/caps.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c index f5552455223f..7007ae2a5ad2 100644 --- a/fs/ceph/caps.c +++ b/fs/ceph/caps.c | |||
@@ -3809,6 +3809,7 @@ bad: | |||
3809 | */ | 3809 | */ |
3810 | void ceph_check_delayed_caps(struct ceph_mds_client *mdsc) | 3810 | void ceph_check_delayed_caps(struct ceph_mds_client *mdsc) |
3811 | { | 3811 | { |
3812 | struct inode *inode; | ||
3812 | struct ceph_inode_info *ci; | 3813 | struct ceph_inode_info *ci; |
3813 | int flags = CHECK_CAPS_NODELAY; | 3814 | int flags = CHECK_CAPS_NODELAY; |
3814 | 3815 | ||
@@ -3824,9 +3825,15 @@ void ceph_check_delayed_caps(struct ceph_mds_client *mdsc) | |||
3824 | time_before(jiffies, ci->i_hold_caps_max)) | 3825 | time_before(jiffies, ci->i_hold_caps_max)) |
3825 | break; | 3826 | break; |
3826 | list_del_init(&ci->i_cap_delay_list); | 3827 | list_del_init(&ci->i_cap_delay_list); |
3828 | |||
3829 | inode = igrab(&ci->vfs_inode); | ||
3827 | spin_unlock(&mdsc->cap_delay_lock); | 3830 | spin_unlock(&mdsc->cap_delay_lock); |
3828 | dout("check_delayed_caps on %p\n", &ci->vfs_inode); | 3831 | |
3829 | ceph_check_caps(ci, flags, NULL); | 3832 | if (inode) { |
3833 | dout("check_delayed_caps on %p\n", inode); | ||
3834 | ceph_check_caps(ci, flags, NULL); | ||
3835 | iput(inode); | ||
3836 | } | ||
3830 | } | 3837 | } |
3831 | spin_unlock(&mdsc->cap_delay_lock); | 3838 | spin_unlock(&mdsc->cap_delay_lock); |
3832 | } | 3839 | } |