Merge branch 'for-4.2-misc' into k.o/for-4.2
This commit is contained in:
@@ -571,6 +571,8 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||
}
|
||||
|
||||
rds_message_addref(rm);
|
||||
rm->data.op_dmasg = 0;
|
||||
rm->data.op_dmaoff = 0;
|
||||
ic->i_data_op = &rm->data;
|
||||
|
||||
/* Finalize the header */
|
||||
@@ -624,7 +626,7 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||
send = &ic->i_sends[pos];
|
||||
first = send;
|
||||
prev = NULL;
|
||||
scat = &ic->i_data_op->op_sg[sg];
|
||||
scat = &ic->i_data_op->op_sg[rm->data.op_dmasg];
|
||||
i = 0;
|
||||
do {
|
||||
unsigned int len = 0;
|
||||
@@ -646,17 +648,20 @@ int rds_ib_xmit(struct rds_connection *conn, struct rds_message *rm,
|
||||
/* Set up the data, if present */
|
||||
if (i < work_alloc
|
||||
&& scat != &rm->data.op_sg[rm->data.op_count]) {
|
||||
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);
|
||||
send->s_wr.num_sge = 2;
|
||||
|
||||
send->s_sge[1].addr = ib_sg_dma_address(dev, scat) + off;
|
||||
send->s_sge[1].addr = ib_sg_dma_address(dev, scat);
|
||||
send->s_sge[1].addr += rm->data.op_dmaoff;
|
||||
send->s_sge[1].length = len;
|
||||
|
||||
bytes_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_dmasg++;
|
||||
rm->data.op_dmaoff = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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:
|
||||
|
@@ -363,6 +363,8 @@ struct rds_message {
|
||||
unsigned int op_active:1;
|
||||
unsigned int op_nents;
|
||||
unsigned int op_count;
|
||||
unsigned int op_dmasg;
|
||||
unsigned int op_dmaoff;
|
||||
struct scatterlist *op_sg;
|
||||
} data;
|
||||
};
|
||||
|
Reference in New Issue
Block a user