if (qp_type(qp) == IB_QPT_UD ||
            qp_type(qp) == IB_QPT_SMI ||
            qp_type(qp) == IB_QPT_GSI) {
+               struct ib_ah *ibah = ud_wr(ibwr)->ah;
+
                wr->wr.ud.remote_qpn = ud_wr(ibwr)->remote_qpn;
                wr->wr.ud.remote_qkey = ud_wr(ibwr)->remote_qkey;
+               wr->wr.ud.ah_num = to_rah(ibah)->ah_num;
                if (qp_type(qp) == IB_QPT_GSI)
                        wr->wr.ud.pkey_index = ud_wr(ibwr)->pkey_index;
                if (wr->opcode == IB_WR_SEND_WITH_IMM)
                return;
        }
 
-       if (qp_type(qp) == IB_QPT_UD ||
-           qp_type(qp) == IB_QPT_SMI ||
-           qp_type(qp) == IB_QPT_GSI)
-               memcpy(&wqe->wr.wr.ud.av, &to_rah(ud_wr(ibwr)->ah)->av,
-                      sizeof(struct rxe_av));
-
        if (unlikely(ibwr->send_flags & IB_SEND_INLINE))
                copy_inline_data_to_wqe(wqe, ibwr);
        else