]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: add CEPH_CAP_OP_REVOKE
authorYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 7 Apr 2009 21:19:03 +0000 (14:19 -0700)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 7 Apr 2009 21:19:03 +0000 (14:19 -0700)
src/client/Client.cc
src/include/ceph_fs.h
src/kernel/caps.c
src/mds/Locker.cc

index 5cf86f4d49f8575b7a06b405da3f3d076f946a0e..187f18bff93f24fe47f22c113ec0954e4a06c964 100644 (file)
@@ -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:
index 5db07b5f7c69b13b8386500adc4d693c8c97f621..2e510a5ea9ae611ddc9cf57cb87eee155fcb8830 100644 (file)
@@ -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";
index b01da4357d0a965de74f2e3511d4895fddfdcada..13875a73f17d619be9c91adcf93138670330e9e8 100644 (file)
@@ -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) {
index 6bdda7e1c5100235f07d7f6fc97a0c7bb03d1bba..c7fd64631c518567d93ec5b4ec19d107983de1ac 100644 (file)
@@ -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(),