From 17273201cef0776da6da868eb3ff87b6250cd0a3 Mon Sep 17 00:00:00 2001 From: green Date: Thu, 26 Feb 2004 18:38:19 +0000 Subject: [PATCH] Merged HEAD in. --- lnet/klnds/qswlnd/qswlnd.c | 11 ++++++++++- lustre/portals/knals/qswnal/qswnal.c | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c index 127bbce..90c9a95 100644 --- a/lnet/klnds/qswlnd/qswlnd.c +++ b/lnet/klnds/qswlnd/qswlnd.c @@ -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 diff --git a/lustre/portals/knals/qswnal/qswnal.c b/lustre/portals/knals/qswnal/qswnal.c index 127bbce..90c9a95 100644 --- a/lustre/portals/knals/qswnal/qswnal.c +++ b/lustre/portals/knals/qswnal/qswnal.c @@ -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 -- 1.8.3.1