Whamcloud - gitweb
* Applied fix for 1888
[fs/lustre-release.git] / lnet / klnds / qswlnd / qswlnd.c
index 127bbce..90c9a95 100644 (file)
@@ -213,7 +213,6 @@ kqswnal_finalise (void)
                /* fall through */
 
        case KQN_INIT_DATA:
-               LASSERT(list_empty(&kqswnal_data.kqn_activetxds));
                break;
 
        case KQN_INIT_NOTHING:
@@ -248,6 +247,9 @@ kqswnal_finalise (void)
 
        if (kqswnal_data.kqn_eptx != NULL)
                ep_free_xmtr (kqswnal_data.kqn_eptx);
+
+       /* freeing the xmtr completes all txs pdq */
+       LASSERT(list_empty(&kqswnal_data.kqn_activetxds));
 #else
        if (kqswnal_data.kqn_eprx_small != NULL)
                ep_remove_large_rcvr (kqswnal_data.kqn_eprx_small);
@@ -255,6 +257,13 @@ kqswnal_finalise (void)
        if (kqswnal_data.kqn_eprx_large != NULL)
                ep_remove_large_rcvr (kqswnal_data.kqn_eprx_large);
 
+       /* wait for transmits to complete */
+       while (!list_empty(&kqswnal_data.kqn_activetxds)) {
+               CWARN("waiting for active transmits to complete\n");
+               set_current_state(TASK_UNINTERRUPTIBLE);
+               schedule_timeout(HZ);
+       }
+
        if (kqswnal_data.kqn_eptx != NULL)
                ep_free_large_xmtr (kqswnal_data.kqn_eptx);
 #endif