|
@@ -262,6 +262,7 @@ static int parse_reply_info(struct ceph_msg *msg,
|
|
|
/* trace */
|
|
|
ceph_decode_32_safe(&p, end, len, bad);
|
|
|
if (len > 0) {
|
|
|
+ ceph_decode_need(&p, end, len, bad);
|
|
|
err = parse_reply_info_trace(&p, p+len, info, features);
|
|
|
if (err < 0)
|
|
|
goto out_bad;
|
|
@@ -270,6 +271,7 @@ static int parse_reply_info(struct ceph_msg *msg,
|
|
|
/* extra */
|
|
|
ceph_decode_32_safe(&p, end, len, bad);
|
|
|
if (len > 0) {
|
|
|
+ ceph_decode_need(&p, end, len, bad);
|
|
|
err = parse_reply_info_extra(&p, p+len, info, features);
|
|
|
if (err < 0)
|
|
|
goto out_bad;
|
|
@@ -398,9 +400,11 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
|
|
|
s->s_con.peer_name.type = CEPH_ENTITY_TYPE_MDS;
|
|
|
s->s_con.peer_name.num = cpu_to_le64(mds);
|
|
|
|
|
|
- spin_lock_init(&s->s_cap_lock);
|
|
|
+ spin_lock_init(&s->s_gen_ttl_lock);
|
|
|
s->s_cap_gen = 0;
|
|
|
s->s_cap_ttl = 0;
|
|
|
+
|
|
|
+ spin_lock_init(&s->s_cap_lock);
|
|
|
s->s_renew_requested = 0;
|
|
|
s->s_renew_seq = 0;
|
|
|
INIT_LIST_HEAD(&s->s_caps);
|
|
@@ -2326,10 +2330,10 @@ static void handle_session(struct ceph_mds_session *session,
|
|
|
case CEPH_SESSION_STALE:
|
|
|
pr_info("mds%d caps went stale, renewing\n",
|
|
|
session->s_mds);
|
|
|
- spin_lock(&session->s_cap_lock);
|
|
|
+ spin_lock(&session->s_gen_ttl_lock);
|
|
|
session->s_cap_gen++;
|
|
|
session->s_cap_ttl = 0;
|
|
|
- spin_unlock(&session->s_cap_lock);
|
|
|
+ spin_unlock(&session->s_gen_ttl_lock);
|
|
|
send_renew_caps(mdsc, session);
|
|
|
break;
|
|
|
|