diff options
| author | Faramarz Jalalian - Sun Microsystems - Irvine United States <Faramarz.Jalalian@Sun.COM> | 2010-02-01 14:47:31 -0800 |
|---|---|---|
| committer | Faramarz Jalalian - Sun Microsystems - Irvine United States <Faramarz.Jalalian@Sun.COM> | 2010-02-01 14:47:31 -0800 |
| commit | 59c5abfe9386b29302c15715915e36bfd1969cf1 (patch) | |
| tree | d3b7013d14172b4b3c8fff5d98a3724d8014de46 /usr/src | |
| parent | 914d7362e7da089c86db1d24a546fe0ccbccac44 (diff) | |
| download | illumos-joyent-59c5abfe9386b29302c15715915e36bfd1969cf1.tar.gz | |
6919008 server panic at: rdma_svc_postrecv
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/uts/common/rpc/rpcib.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/usr/src/uts/common/rpc/rpcib.c b/usr/src/uts/common/rpc/rpcib.c index c40a61603b..fe0596250c 100644 --- a/usr/src/uts/common/rpc/rpcib.c +++ b/usr/src/uts/common/rpc/rpcib.c @@ -1397,7 +1397,11 @@ rib_svc_rcq_handler(ibt_cq_hdl_t cq_hdl, void *arg) } mutex_enter(&plugin_state_lock); - if (plugin_state == ACCEPT) { + mutex_enter(&conn->c_lock); + if ((plugin_state == ACCEPT) && + (conn->c_state == C_CONNECTED)) { + conn->c_ref++; + mutex_exit(&conn->c_lock); while ((mp = allocb(sizeof (*rdp), BPRI_LO)) == NULL) (void) strwaitbuf( @@ -1415,9 +1419,6 @@ rib_svc_rcq_handler(ibt_cq_hdl_t cq_hdl, void *arg) rdp->rpcmsg.type = RECV_BUFFER; rdp->rpcmsg.len = wc.wc_bytes_xfer; rdp->status = wc.wc_status; - mutex_enter(&conn->c_lock); - conn->c_ref++; - mutex_exit(&conn->c_lock); mp->b_wptr += sizeof (*rdp); svc_queuereq((queue_t *)rib_stat->q, mp); mutex_exit(&plugin_state_lock); @@ -1428,6 +1429,7 @@ rib_svc_rcq_handler(ibt_cq_hdl_t cq_hdl, void *arg) * requests for krpc, so don't do anything, just * free the msg. */ + mutex_exit(&conn->c_lock); mutex_exit(&plugin_state_lock); rib_rbuf_free(conn, RECV_BUFFER, (void *)(uintptr_t)s_recvp->vaddr); |
