qp->pd = pd;
        qp->uobject = uobj;
        qp->real_qp = qp;
+
+       qp->qp_type = attr->qp_type;
+       qp->rwq_ind_tbl = attr->rwq_ind_tbl;
+       qp->send_cq = attr->send_cq;
+       qp->recv_cq = attr->recv_cq;
+       qp->srq = attr->srq;
+       qp->rwq_ind_tbl = attr->rwq_ind_tbl;
+       qp->event_handler = attr->event_handler;
+
+       atomic_set(&qp->usecnt, 0);
+       spin_lock_init(&qp->mr_lock);
+       INIT_LIST_HEAD(&qp->rdma_mrs);
+       INIT_LIST_HEAD(&qp->sig_mrs);
+
        /*
         * We don't track XRC QPs for now, because they don't have PD
         * and more importantly they are created internaly by driver,
 
                if (ret)
                        goto err_cb;
 
-               qp->pd            = pd;
-               qp->send_cq       = attr.send_cq;
-               qp->recv_cq       = attr.recv_cq;
-               qp->srq           = attr.srq;
-               qp->rwq_ind_tbl   = ind_tbl;
-               qp->event_handler = attr.event_handler;
-               qp->qp_type       = attr.qp_type;
-               atomic_set(&qp->usecnt, 0);
                atomic_inc(&pd->usecnt);
-               qp->port = 0;
                if (attr.send_cq)
                        atomic_inc(&attr.send_cq->usecnt);
                if (attr.recv_cq)
 
        if (ret)
                goto err;
 
-       qp->qp_type    = qp_init_attr->qp_type;
-       qp->rwq_ind_tbl = qp_init_attr->rwq_ind_tbl;
-
-       atomic_set(&qp->usecnt, 0);
-       qp->mrs_used = 0;
-       spin_lock_init(&qp->mr_lock);
-       INIT_LIST_HEAD(&qp->rdma_mrs);
-       INIT_LIST_HEAD(&qp->sig_mrs);
-       qp->port = 0;
-
        if (qp_init_attr->qp_type == IB_QPT_XRC_TGT) {
                struct ib_qp *xrc_qp =
                        create_xrc_qp_user(qp, qp_init_attr, udata);