|
@@ -581,6 +581,8 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
|
|
ic->i_unsignaled_wrs = rds_iw_sysctl_max_unsig_wrs;
|
|
|
ic->i_unsignaled_bytes = rds_iw_sysctl_max_unsig_bytes;
|
|
|
rds_message_addref(rm);
|
|
|
+ rm->data.op_dmasg = 0;
|
|
|
+ rm->data.op_dmaoff = 0;
|
|
|
ic->i_rm = rm;
|
|
|
|
|
|
/* Finalize the header */
|
|
@@ -622,7 +624,7 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
|
|
send = &ic->i_sends[pos];
|
|
|
first = send;
|
|
|
prev = NULL;
|
|
|
- scat = &rm->data.op_sg[sg];
|
|
|
+ scat = &rm->data.op_sg[rm->data.op_dmasg];
|
|
|
sent = 0;
|
|
|
i = 0;
|
|
|
|
|
@@ -656,10 +658,11 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
|
|
|
|
|
send = &ic->i_sends[pos];
|
|
|
|
|
|
- len = min(RDS_FRAG_SIZE, ib_sg_dma_len(dev, scat) - off);
|
|
|
+ len = min(RDS_FRAG_SIZE,
|
|
|
+ ib_sg_dma_len(dev, scat) - rm->data.op_dmaoff);
|
|
|
rds_iw_xmit_populate_wr(ic, send, pos,
|
|
|
- ib_sg_dma_address(dev, scat) + off, len,
|
|
|
- send_flags);
|
|
|
+ ib_sg_dma_address(dev, scat) + rm->data.op_dmaoff, len,
|
|
|
+ send_flags);
|
|
|
|
|
|
/*
|
|
|
* We want to delay signaling completions just enough to get
|
|
@@ -687,10 +690,11 @@ int rds_iw_xmit(struct rds_connection *conn, struct rds_message *rm,
|
|
|
&send->s_wr, send->s_wr.num_sge, send->s_wr.next);
|
|
|
|
|
|
sent += len;
|
|
|
- off += len;
|
|
|
- if (off == ib_sg_dma_len(dev, scat)) {
|
|
|
+ rm->data.op_dmaoff += len;
|
|
|
+ if (rm->data.op_dmaoff == ib_sg_dma_len(dev, scat)) {
|
|
|
scat++;
|
|
|
- off = 0;
|
|
|
+ rm->data.op_dmaoff = 0;
|
|
|
+ rm->data.op_dmasg++;
|
|
|
}
|
|
|
|
|
|
add_header:
|