if (!rxe_get(qp))
                return -EAGAIN;
 
-       if (!qp->valid || qp->req.state == QP_STATE_ERROR ||
-           qp->req.state == QP_STATE_RESET) {
+       if (!qp->valid || qp->comp.state == QP_STATE_ERROR ||
+           qp->comp.state == QP_STATE_RESET) {
                rxe_drain_resp_pkts(qp, qp->valid &&
-                                   qp->req.state == QP_STATE_ERROR);
+                                   qp->comp.state == QP_STATE_ERROR);
                goto exit;
        }
 
 
                                               QUEUE_TYPE_FROM_CLIENT);
 
        qp->req.state           = QP_STATE_RESET;
+       qp->comp.state          = QP_STATE_RESET;
        qp->req.opcode          = -1;
        qp->comp.opcode         = -1;
 
 
        /* move qp to the reset state */
        qp->req.state = QP_STATE_RESET;
+       qp->comp.state = QP_STATE_RESET;
        qp->resp.state = QP_STATE_RESET;
 
        /* let state machines reset themselves drain work and packet queues
 {
        qp->req.state = QP_STATE_ERROR;
        qp->resp.state = QP_STATE_ERROR;
+       qp->comp.state = QP_STATE_ERROR;
        qp->attr.qp_state = IB_QPS_ERR;
 
        /* drain work and packet queues */
                        pr_debug("qp#%d state -> INIT\n", qp_num(qp));
                        qp->req.state = QP_STATE_INIT;
                        qp->resp.state = QP_STATE_INIT;
+                       qp->comp.state = QP_STATE_INIT;
                        break;
 
                case IB_QPS_RTR:
                case IB_QPS_RTS:
                        pr_debug("qp#%d state -> RTS\n", qp_num(qp));
                        qp->req.state = QP_STATE_READY;
+                       qp->comp.state = QP_STATE_READY;
                        break;
 
                case IB_QPS_SQD:
 
        /* update wqe_index for each wqe completion */
        qp->req.wqe_index = queue_next_index(qp->sq.queue, qp->req.wqe_index);
        wqe->state = wqe_state_error;
+       qp->req.state = QP_STATE_ERROR;
        rxe_run_task(&qp->comp.task, 0);
 exit:
        ret = -EAGAIN;