int rc;
 
        for (dstchunk = 0; dstchunk < 2; dstchunk++) {
-               struct ib_sge *sge =
-                       wr_rdma_buf->wr_tx_rdma[dstchunk].wr.sg_list;
+               struct ib_rdma_wr *wr = &wr_rdma_buf->wr_tx_rdma[dstchunk];
+               struct ib_sge *sge = wr->wr.sg_list;
+               u64 base_addr = dma_addr;
+
+               if (dst_len < link->qp_attr.cap.max_inline_data) {
+                       base_addr = (uintptr_t)conn->sndbuf_desc->cpu_addr;
+                       wr->wr.send_flags |= IB_SEND_INLINE;
+               } else {
+                       wr->wr.send_flags &= ~IB_SEND_INLINE;
+               }
 
                num_sges = 0;
                for (srcchunk = 0; srcchunk < 2; srcchunk++) {
-                       sge[srcchunk].addr = dma_addr + src_off;
+                       sge[srcchunk].addr = base_addr + src_off;
                        sge[srcchunk].length = src_len;
                        num_sges++;
 
                        src_len = dst_len - src_len; /* remainder */
                        src_len_sum += src_len;
                }
-               rc = smc_tx_rdma_write(conn, dst_off, num_sges,
-                                      &wr_rdma_buf->wr_tx_rdma[dstchunk]);
+               rc = smc_tx_rdma_write(conn, dst_off, num_sges, wr);
                if (rc)
                        return rc;
                if (dst_len_sum == len)