]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: be explicit about MDRequest killed state
authorSage Weil <sage@inktank.com>
Thu, 29 Nov 2012 05:19:37 +0000 (21:19 -0800)
committerSage Weil <sage@inktank.com>
Fri, 30 Nov 2012 01:21:45 +0000 (17:21 -0800)
Set the killed flag and use that instead of inferring things from
the session xlist.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mds/MDCache.cc
src/mds/Mutation.h

index 2ab85808e7e9b2debb3065c239d2c1dabb683968..5f0ba16defdbc929f7d39426997051802beebdda 100644 (file)
@@ -7488,12 +7488,11 @@ void MDCache::request_forward(MDRequest *mdr, int who, int port)
 
 void MDCache::dispatch_request(MDRequest *mdr)
 {
+  if (mdr->killed) {
+    dout(10) << "request " << *mdr << " was killed" << dendl;
+    return;
+  }
   if (mdr->client_request) {
-    if (!mdr->reqid.name.is_mds() &&
-       !mdr->item_session_request.is_on_list()) {
-      dout(10) << "request " << *mdr << " is canceled" << dendl;
-      return;
-    }
     mds->server->dispatch_client_request(mdr);
   } else if (mdr->slave_request) {
     mds->server->dispatch_slave_request(mdr);
@@ -7605,6 +7604,7 @@ void MDCache::request_cleanup(MDRequest *mdr)
 
 void MDCache::request_kill(MDRequest *mdr)
 {
+  mdr->killed = true;
   if (!mdr->committing) {
     dout(10) << "request_kill " << *mdr << dendl;
     request_cleanup(mdr);
index ca5ee963a91a06b3e35448736ad0713475b54099..cba6223864ed81d8a1659fa81edd2a9de5c3edb9 100644 (file)
@@ -67,6 +67,7 @@ struct Mutation {
   bool done_locking; 
   bool committing;
   bool aborted;
+  bool killed;
 
   // for applying projected inode changes
   list<CInode*> projected_inodes;
@@ -81,13 +82,13 @@ struct Mutation {
       ls(0),
       slave_to_mds(-1),
       locking(NULL),
-      done_locking(false), committing(false), aborted(false) { }
+      done_locking(false), committing(false), aborted(false), killed(false) { }
   Mutation(metareqid_t ri, __u32 att=0, int slave_to=-1)
     : reqid(ri), attempt(att),
       ls(0),
       slave_to_mds(slave_to), 
       locking(NULL),
-      done_locking(false), committing(false), aborted(false) { }
+      done_locking(false), committing(false), aborted(false), killed(false) { }
   virtual ~Mutation() {
     assert(locking == NULL);
     assert(pins.empty());