summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authoragiri <none@none>2007-10-10 09:28:54 -0700
committeragiri <none@none>2007-10-10 09:28:54 -0700
commit2e8bde70d0141390208fe321bf3a9e4f043b5587 (patch)
tree57f82d0c76b7453b45fc5e721239165b66dbc625 /usr/src
parent1a6921e0a06eec4387aac4c955214dd83b01028d (diff)
downloadillumos-joyent-2e8bde70d0141390208fe321bf3a9e4f043b5587.tar.gz
6610415 fix to CR 6597119 failed (another panic in daplt)
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c
index 9f212a84a0..e2853ed338 100644
--- a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c
+++ b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c
@@ -1243,6 +1243,21 @@ ibt_close_rc_channel(ibt_channel_hdl_t channel, ibt_execution_mode_t mode,
if (ret_priv_data_len_p != NULL)
*ret_priv_data_len_p = 0;
+ if ((mode == IBT_BLOCKING) ||
+ (mode == IBT_NOCALLBACKS)) {
+ IBCM_GET_CHAN_PRIVATE(channel, statep);
+ if (statep == NULL)
+ return (IBT_SUCCESS);
+ mutex_enter(&statep->state_mutex);
+ IBCM_RELEASE_CHAN_PRIVATE(channel);
+ IBCM_REF_CNT_INCR(statep);
+ while (statep->close_done != B_TRUE)
+ cv_wait(&statep->block_client_cv,
+ &statep->state_mutex);
+ IBCM_REF_CNT_DECR(statep);
+ mutex_exit(&statep->state_mutex);
+ }
+
IBTF_DPRINTF_L3(cmlog, "ibt_close_rc_channel: chan 0x%p "
"already marked for closing", channel);