> Sent: Tuesday, March 06, 2018 at 4:22 PM > From: "Yan, Zheng" <ukernel@xxxxxxxxx> > To: "Chengguang Xu" <cgxu519@xxxxxxxxxx> > Cc: "Yan, Zheng" <zyan@xxxxxxxxxx>, "Ceph Development" <ceph-devel@xxxxxxxxxxxxxxx>, "Ilya Dryomov" <idryomov@xxxxxxxxx>, cgxu519@xxxxxxx > Subject: Re: [PATCH] ceph: check return value of ceph_get_cap() > > On Tue, Mar 6, 2018 at 12:22 PM, Chengguang Xu <cgxu519@xxxxxxxxxx> wrote: > > Hi Yan, > > > > Any objection for this? > > > > Failing to record a cap from mds is serious problem. It may hang the > mds. I'd like to kill the whole mount in this case. How about calling panic() instead of working continuously? > > >> 在 2018年2月24日,下午6:34,Chengguang Xu <cgxu519@xxxxxxxxxx> 写道: > >> > >> ceph_get_cap() can return NULL, so should check return value carefully > >> in case of using NULL pointer unexpectedly. > >> > >> Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxx> > >> --- > >> Only compile tested. > >> > >> fs/ceph/caps.c | 10 ++++++++++ > >> 1 file changed, 10 insertions(+) > >> > >> diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c > >> index 6582c45..9ef40ae 100644 > >> --- a/fs/ceph/caps.c > >> +++ b/fs/ceph/caps.c > >> @@ -3510,6 +3510,10 @@ static void handle_cap_export(struct inode *inode, struct ceph_mds_caps *ex, > >> } else if (tsession) { > >> /* add placeholder for the export tagert */ > >> int flag = (cap == ci->i_auth_cap) ? CEPH_CAP_FLAG_AUTH : 0; > >> + > >> + if (!new_cap) > >> + goto out_unlock; > >> + > >> tcap = new_cap; > >> ceph_add_cap(inode, tsession, t_cap_id, -1, issued, 0, > >> t_seq - 1, t_mseq, (u64)-1, flag, &new_cap); > >> @@ -3764,6 +3768,11 @@ void ceph_handle_caps(struct ceph_mds_session *session, > >> > >> if (op == CEPH_CAP_OP_IMPORT) { > >> cap = ceph_get_cap(mdsc, NULL); > >> + if (!cap) { > >> + pr_err("%s: can't get cap\n", __func__); > >> + goto bad_cap; > >> + } > >> + > >> cap->cap_ino = vino.ino; > >> cap->queue_release = 1; > >> cap->cap_id = le64_to_cpu(h->cap_id); > >> @@ -3864,6 +3873,7 @@ void ceph_handle_caps(struct ceph_mds_session *session, > >> > >> bad: > >> pr_err("ceph_handle_caps: corrupt message\n"); > >> +bad_cap: > >> ceph_msg_dump(msg); > >> return; > >> } > >> -- > >> 1.8.3.1 > >> > > > > -- > > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > > the body of a message to majordomo@xxxxxxxxxxxxxxx > > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html