diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2009-04-07 14:19:03 -0700 |
---|---|---|
committer | Yehuda Sadeh <yehuda@hq.newdream.net> | 2009-04-07 14:19:03 -0700 |
commit | 72c19322889eded827701d25bd6c0efc48580b5e (patch) | |
tree | e125688281a4d4a1803482964a6173e7dafbce87 | |
parent | 23a41e4c3880e3732f78c3bd78bcf3dcd14b4a44 (diff) | |
download | ceph-72c19322889eded827701d25bd6c0efc48580b5e.tar.gz |
mds: add CEPH_CAP_OP_REVOKE
-rw-r--r-- | src/client/Client.cc | 1 | ||||
-rw-r--r-- | src/include/ceph_fs.h | 2 | ||||
-rw-r--r-- | src/kernel/caps.c | 1 | ||||
-rw-r--r-- | src/mds/Locker.cc | 2 |
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(), |