From 1a52cf15d2b3120e63301692927643e3da65ffe4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 9 Apr 2009 14:09:45 -0700 Subject: [PATCH] mds: replace WANT cap op with DROP While it's not always clear when we are expanding wanted (bc the client may have skewed perception of mds_wanted), it IS always clear when we are explicitly _dropping_ caps and don't want them reissued to us. And that's the behavior we're trying to avoid anyway. --- src/include/ceph_fs.h | 4 ++-- src/kernel/caps.c | 9 ++++----- src/mds/Locker.cc | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index e57e85b803914..c0efce17d2eb9 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -1015,7 +1015,7 @@ enum { CEPH_CAP_OP_EXPORT, /* mds has exported the cap */ CEPH_CAP_OP_IMPORT, /* mds has imported the cap from specified mds */ CEPH_CAP_OP_UPDATE, /* client->mds update */ - CEPH_CAP_OP_WANT, /* client->mds wanted update */ + CEPH_CAP_OP_DROP, /* client->mds drop cap bits */ CEPH_CAP_OP_FLUSH_ACK, /* mds->client flushed. if caps=0, cap also released. */ CEPH_CAP_OP_FLUSHSNAP, /* client->mds flush snapped metadata */ CEPH_CAP_OP_FLUSHSNAP_ACK, /* mds->client flushed snapped metadata */ @@ -1032,7 +1032,7 @@ static inline const char *ceph_cap_op_name(int op) case CEPH_CAP_OP_EXPORT: return "export"; case CEPH_CAP_OP_IMPORT: return "import"; case CEPH_CAP_OP_UPDATE: return "update"; - case CEPH_CAP_OP_WANT: return "want"; + case CEPH_CAP_OP_DROP: return "drop"; case CEPH_CAP_OP_FLUSH_ACK: return "flush_ack"; case CEPH_CAP_OP_FLUSHSNAP: return "flushsnap"; case CEPH_CAP_OP_FLUSHSNAP_ACK: return "flushsnap_ack"; diff --git a/src/kernel/caps.c b/src/kernel/caps.c index b0f2da8386fa0..3e3612ae76a2b 100644 --- a/src/kernel/caps.c +++ b/src/kernel/caps.c @@ -1186,13 +1186,12 @@ ack: } /* don't update mds wanted on drop */ - if (drop) + if (drop) { want = cap->mds_wanted; - - if (want & ~cap->mds_wanted) - op = CEPH_CAP_OP_WANT; - else + op = CEPH_CAP_OP_DROP; + } else { op = CEPH_CAP_OP_UPDATE; + } mds = cap->mds; /* remember mds, so we don't repeat */ diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc index 4fde7efed6e93..14397ef128d15 100644 --- a/src/mds/Locker.cc +++ b/src/mds/Locker.cc @@ -1561,7 +1561,7 @@ void Locker::handle_client_caps(MClientCaps *m) << " (seq " << m->get_seq() << " != last_issue " << cap->get_last_issue() << ")" << dendl; } } - if (m->get_op() == CEPH_CAP_OP_WANT && (wanted & ~cap->pending())) + if (m->get_op() != CEPH_CAP_OP_DROP && (wanted & ~cap->pending())) do_issue = true; if (!_do_cap_update(in, cap, m->get_dirty(), m->get_wanted(), follows, m, ack)) { -- 2.39.5