Whamcloud - gitweb
b=22556 lst: check # of remained RPCs before aborting
authorLiang Zhen <zhen.liang@sun.com>
Wed, 7 Apr 2010 10:04:08 +0000 (12:04 +0200)
committerJohann Lombardi <johann@sun.com>
Wed, 7 Apr 2010 10:04:08 +0000 (12:04 +0200)
i=isaac

lstcon_rpc_trans_postwait() calls lstcon_rpc_trans_abort() only when the
transaction is timeout, so if we got "end_session" to interrupt waiting on
transaction, then we can hit the assertion failure ASSERTION(crpc->crp_stamp
!= 0)

lnet/selftest/conrpc.c

index 3b2fb75..e629ba3 100644 (file)
@@ -292,8 +292,12 @@ lstcon_rpc_trans_abort(lstcon_rpc_trans_t *trans, int error)
 
                 spin_lock(&rpc->crpc_lock);
 
-                if (!crpc->crp_posted || crpc->crp_stamp != 0) {
-                        /* rpc done or aborted already */
+                if (!crpc->crp_posted || /* not posted */
+                    crpc->crp_stamp != 0) { /* rpc done or aborted already */
+                        if (crpc->crp_stamp == 0) {
+                                crpc->crp_stamp = cfs_time_current();
+                                crpc->crp_status = -EINTR;
+                        }
                         spin_unlock(&rpc->crpc_lock);
                         continue;
                 }
@@ -362,7 +366,7 @@ lstcon_rpc_trans_postwait(lstcon_rpc_trans_t *trans, int timeout)
         if (console_session.ses_shutdown)
                 rc = -ESHUTDOWN;
 
-        if (rc != 0) {
+        if (rc != 0 || atomic_read(&trans->tas_remaining) != 0) {
                 /* treat short timeout as canceled */
                 if (rc == -ETIMEDOUT && timeout < LST_TRANS_MIN_TIMEOUT * 2)
                         rc = -EINTR;