From: Sage Weil Date: Thu, 10 Sep 2009 23:36:55 +0000 (-0700) Subject: kclient: set/verify seq in renew caps messages X-Git-Tag: v0.15~73 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e5b1d5ba437f630cd2e71cb69e32f6741e951461;p=ceph.git kclient: set/verify seq in renew caps messages --- diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index 63af4ed0f7e..b83fe942000 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -332,6 +332,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, 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); @@ -782,7 +783,8 @@ static int send_renew_caps(struct ceph_mds_client *mdsc, 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); @@ -1880,7 +1882,8 @@ static void handle_session(struct ceph_mds_session *session, 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: diff --git a/src/kernel/mds_client.h b/src/kernel/mds_client.h index 18a2932dc12..f566e9c8429 100644 --- a/src/kernel/mds_client.h +++ b/src/kernel/mds_client.h @@ -114,6 +114,7 @@ struct ceph_mds_session { 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 */