return RESPST_CLEANUP;
 }
 
-static int send_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
+
+static int send_common_ack(struct rxe_qp *qp, u8 syndrome, u32 psn,
+                                 int opcode, const char *msg)
 {
-       int err = 0;
+       int err;
        struct rxe_pkt_info ack_pkt;
        struct sk_buff *skb;
 
-       skb = prepare_ack_packet(qp, &ack_pkt, IB_OPCODE_RC_ACKNOWLEDGE,
-                                0, psn, syndrome);
-       if (!skb) {
-               err = -ENOMEM;
-               goto err1;
-       }
+       skb = prepare_ack_packet(qp, &ack_pkt, opcode, 0, psn, syndrome);
+       if (!skb)
+               return -ENOMEM;
 
        err = rxe_xmit_packet(qp, &ack_pkt, skb);
        if (err)
-               pr_err_ratelimited("Failed sending ack\n");
+               pr_err_ratelimited("Failed sending %s\n", msg);
 
-err1:
        return err;
 }
 
-static int send_atomic_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
+static int send_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
 {
-       int err = 0;
-       struct rxe_pkt_info ack_pkt;
-       struct sk_buff *skb;
-
-       skb = prepare_ack_packet(qp, &ack_pkt, IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE,
-                                0, psn, syndrome);
-       if (!skb) {
-               err = -ENOMEM;
-               goto out;
-       }
+       return send_common_ack(qp, syndrome, psn,
+                       IB_OPCODE_RC_ACKNOWLEDGE, "ACK");
+}
 
-       err = rxe_xmit_packet(qp, &ack_pkt, skb);
-       if (err)
-               pr_err_ratelimited("Failed sending atomic ack\n");
+static int send_atomic_ack(struct rxe_qp *qp, u8 syndrome, u32 psn)
+{
+       int ret = send_common_ack(qp, syndrome, psn,
+                       IB_OPCODE_RC_ATOMIC_ACKNOWLEDGE, "ATOMIC ACK");
 
        /* have to clear this since it is used to trigger
         * long read replies
         */
        qp->resp.res = NULL;
-out:
-       return err;
+       return ret;
 }
 
 static enum resp_states acknowledge(struct rxe_qp *qp,