s->s_cap_gen = 0;
s->s_cap_ttl = 0;
s->s_renew_requested = 0;
+ s->s_renew_seq = 0;
INIT_LIST_HEAD(&s->s_caps);
s->s_nr_caps = 0;
atomic_set(&s->s_ref, 1);
dout("send_renew_caps to mds%d (%s)\n", session->s_mds,
ceph_mds_state_name(state));
session->s_renew_requested = jiffies;
- msg = create_session_msg(CEPH_SESSION_REQUEST_RENEWCAPS, 0);
+ msg = create_session_msg(CEPH_SESSION_REQUEST_RENEWCAPS,
+ ++session->s_renew_seq);
if (IS_ERR(msg))
return PTR_ERR(msg);
ceph_con_send(&session->s_con, msg);
break;
case CEPH_SESSION_RENEWCAPS:
- renewed_caps(mdsc, session, 1);
+ if (session->s_renew_seq == seq)
+ renewed_caps(mdsc, session, 1);
break;
case CEPH_SESSION_CLOSE:
struct list_head s_cap_flushing; /* inodes w/ flushing caps */
struct list_head s_cap_snaps_flushing;
unsigned long s_renew_requested; /* last time we sent a renew req */
+ u64 s_renew_seq;
atomic_t s_ref;
struct list_head s_waiting; /* waiting requests */