From 31bc1b0ae98135f4cc103cf70178271b8c19a0ae Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 15 Jan 2009 16:16:47 -0800 Subject: [PATCH] lease: difrentiate lease release cases (revoke, preemptive) --- src/include/ceph_fs.h | 7 ++++--- src/kernel/mds_client.c | 2 +- src/mds/Locker.cc | 4 +++- src/messages/MClientLease.h | 1 + 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index 497f18c4181..74fb0802b41 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -1057,9 +1057,10 @@ struct ceph_mds_caps { } __attribute__ ((packed)); -#define CEPH_MDS_LEASE_REVOKE 1 /* mds -> client */ -#define CEPH_MDS_LEASE_RELEASE 2 /* client -> mds */ -#define CEPH_MDS_LEASE_RENEW 3 /* client <-> mds */ +#define CEPH_MDS_LEASE_REVOKE 1 /* mds -> client */ +#define CEPH_MDS_LEASE_RELEASE 2 /* client -> mds */ +#define CEPH_MDS_LEASE_RENEW 3 /* client <-> mds */ +#define CEPH_MDS_LEASE_REVOKE_ACK 4 /* client -> mds */ struct ceph_mds_lease { __u8 action; diff --git a/src/kernel/mds_client.c b/src/kernel/mds_client.c index 030594c8b84..205aba072bd 100644 --- a/src/kernel/mds_client.c +++ b/src/kernel/mds_client.c @@ -1839,7 +1839,7 @@ void ceph_mdsc_handle_lease(struct ceph_mds_client *mdsc, struct ceph_msg *msg) release: iput(inode); /* let's just reuse the same message */ - h->action = CEPH_MDS_LEASE_RELEASE; + h->action = CEPH_MDS_LEASE_REVOKE_ACK; ceph_msg_get(msg); ceph_send_msg_mds(mdsc, msg, mds); mutex_unlock(&session->s_mutex); diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 91e477b7c70..95ea12efe64 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1373,13 +1373,15 @@ void Locker::handle_client_lease(MClientLease *m) delete m; return; } - if (l->seq != m->get_seq()) { + if ((m->get_action() == CEPH_MDS_LEASE_REVOKE_ACK) && + (l->seq != m->get_seq())) { dout(7) << "handle_client_lease lease seq " << l->seq << " != " << m->get_seq() << dendl; delete m; return; } switch (m->get_action()) { + case CEPH_MDS_LEASE_REVOKE_ACK: case CEPH_MDS_LEASE_RELEASE: { dout(7) << "handle_client_lease client" << client diff --git a/src/messages/MClientLease.h b/src/messages/MClientLease.h index 7869eb9cc22..6ba6a296bd5 100644 --- a/src/messages/MClientLease.h +++ b/src/messages/MClientLease.h @@ -23,6 +23,7 @@ static const char *get_lease_action_name(int a) { case CEPH_MDS_LEASE_REVOKE: return "revoke"; case CEPH_MDS_LEASE_RELEASE: return "release"; case CEPH_MDS_LEASE_RENEW: return "renew"; + case CEPH_MDS_LEASE_REVOKE_ACK: return "revoke ack"; default: assert(0); return 0; } } -- 2.47.3