summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2009-04-07 14:19:03 -0700
committerYehuda Sadeh <yehuda@hq.newdream.net>2009-04-07 14:19:03 -0700
commit72c19322889eded827701d25bd6c0efc48580b5e (patch)
treee125688281a4d4a1803482964a6173e7dafbce87
parent23a41e4c3880e3732f78c3bd78bcf3dcd14b4a44 (diff)
downloadceph-72c19322889eded827701d25bd6c0efc48580b5e.tar.gz
mds: add CEPH_CAP_OP_REVOKE
-rw-r--r--src/client/Client.cc1
-rw-r--r--src/include/ceph_fs.h2
-rw-r--r--src/kernel/caps.c1
-rw-r--r--src/mds/Locker.cc2
4 files changed, 5 insertions, 1 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc
index 5cf86f4d49f..187f18bff93 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -1990,6 +1990,7 @@ void Client::handle_caps(MClientCaps *m)
switch (m->get_op()) {
case CEPH_CAP_OP_TRUNC: return handle_cap_trunc(in, m);
+ case CEPH_CAP_OP_REVOKE:
case CEPH_CAP_OP_GRANT: return handle_cap_grant(in, mds, cap, m);
case CEPH_CAP_OP_FLUSH_ACK: return handle_cap_flush_ack(in, mds, cap, m);
default:
diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h
index 5db07b5f7c6..2e510a5ea9a 100644
--- a/src/include/ceph_fs.h
+++ b/src/include/ceph_fs.h
@@ -1008,6 +1008,7 @@ static inline int ceph_caps_for_mode(int mode)
enum {
CEPH_CAP_OP_GRANT, /* mds->client grant */
+ CEPH_CAP_OP_REVOKE, /* mds->client revoke */
CEPH_CAP_OP_TRUNC, /* mds->client trunc notify */
CEPH_CAP_OP_EXPORT, /* mds has exported the cap */
CEPH_CAP_OP_IMPORT, /* mds has imported the cap from specified mds */
@@ -1023,6 +1024,7 @@ static inline const char *ceph_cap_op_name(int op)
{
switch (op) {
case CEPH_CAP_OP_GRANT: return "grant";
+ case CEPH_CAP_OP_REVOKE: return "revoke";
case CEPH_CAP_OP_TRUNC: return "trunc";
case CEPH_CAP_OP_EXPORT: return "export";
case CEPH_CAP_OP_IMPORT: return "import";
diff --git a/src/kernel/caps.c b/src/kernel/caps.c
index b01da4357d0..13875a73f17 100644
--- a/src/kernel/caps.c
+++ b/src/kernel/caps.c
@@ -2049,6 +2049,7 @@ void ceph_handle_caps(struct ceph_mds_client *mdsc,
/* note that each of these drops i_lock for us */
switch (op) {
+ case CEPH_CAP_OP_REVOKE:
case CEPH_CAP_OP_GRANT:
r = handle_cap_grant(inode, h, session, cap,&xattr_data);
if (r == 1) {
diff --git a/src/mds/Locker.cc b/src/mds/Locker.cc
index 6bdda7e1c51..c7fd64631c5 100644
--- a/src/mds/Locker.cc
+++ b/src/mds/Locker.cc
@@ -1076,7 +1076,7 @@ bool Locker::issue_caps(CInode *in)
<< " new pending " << ccap_string(after) << " was " << ccap_string(before)
<< dendl;
- MClientCaps *m = new MClientCaps(CEPH_CAP_OP_GRANT,
+ MClientCaps *m = new MClientCaps((before & ~after) ? CEPH_CAP_OP_REVOKE:CEPH_CAP_OP_GRANT
in->ino(),
in->find_snaprealm()->inode->ino(),
cap->get_cap_id(), cap->get_last_seq(),