aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/socket.c
diff options
context:
space:
mode:
authorXin Long <lucien.xin@gmail.com>2017-05-31 04:36:31 -0400
committerDavid S. Miller <davem@davemloft.net>2017-06-02 13:56:26 -0400
commitcee360ab4dd66fc1de33a5fa1cb418fa21c27ce3 (patch)
treedb9b8575e7392b314e94a946590b71bb5c856e64 /net/sctp/socket.c
parent6e7da286e3513ac1e107ef8dffa5f254029d68e7 (diff)
sctp: define the member stream as an object instead of pointer in asoc
As Marcelo's suggestion, stream is a fixed size member of asoc and would not grow with more streams. To avoid an allocation for it, this patch is to define it as an object instead of pointer and update the places using it, also create sctp_stream_update() called in sctp_assoc_update() to migrate the stream info from one stream to another. Signed-off-by: Xin Long <lucien.xin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r--net/sctp/socket.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index f16c8d97b7f3..0822046e4f3f 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -1920,7 +1920,7 @@ static int sctp_sendmsg(struct sock *sk, struct msghdr *msg, size_t msg_len)
1920 } 1920 }
1921 1921
1922 /* Check for invalid stream. */ 1922 /* Check for invalid stream. */
1923 if (sinfo->sinfo_stream >= asoc->stream->outcnt) { 1923 if (sinfo->sinfo_stream >= asoc->stream.outcnt) {
1924 err = -EINVAL; 1924 err = -EINVAL;
1925 goto out_free; 1925 goto out_free;
1926 } 1926 }
@@ -4497,8 +4497,8 @@ int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,
4497 info->sctpi_rwnd = asoc->a_rwnd; 4497 info->sctpi_rwnd = asoc->a_rwnd;
4498 info->sctpi_unackdata = asoc->unack_data; 4498 info->sctpi_unackdata = asoc->unack_data;
4499 info->sctpi_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); 4499 info->sctpi_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
4500 info->sctpi_instrms = asoc->stream->incnt; 4500 info->sctpi_instrms = asoc->stream.incnt;
4501 info->sctpi_outstrms = asoc->stream->outcnt; 4501 info->sctpi_outstrms = asoc->stream.outcnt;
4502 list_for_each(pos, &asoc->base.inqueue.in_chunk_list) 4502 list_for_each(pos, &asoc->base.inqueue.in_chunk_list)
4503 info->sctpi_inqueue++; 4503 info->sctpi_inqueue++;
4504 list_for_each(pos, &asoc->outqueue.out_chunk_list) 4504 list_for_each(pos, &asoc->outqueue.out_chunk_list)
@@ -4727,8 +4727,8 @@ static int sctp_getsockopt_sctp_status(struct sock *sk, int len,
4727 status.sstat_unackdata = asoc->unack_data; 4727 status.sstat_unackdata = asoc->unack_data;
4728 4728
4729 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map); 4729 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
4730 status.sstat_instrms = asoc->stream->incnt; 4730 status.sstat_instrms = asoc->stream.incnt;
4731 status.sstat_outstrms = asoc->stream->outcnt; 4731 status.sstat_outstrms = asoc->stream.outcnt;
4732 status.sstat_fragmentation_point = asoc->frag_point; 4732 status.sstat_fragmentation_point = asoc->frag_point;
4733 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc); 4733 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
4734 memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr, 4734 memcpy(&status.sstat_primary.spinfo_address, &transport->ipaddr,
@@ -6600,10 +6600,10 @@ static int sctp_getsockopt_pr_streamstatus(struct sock *sk, int len,
6600 goto out; 6600 goto out;
6601 6601
6602 asoc = sctp_id2assoc(sk, params.sprstat_assoc_id); 6602 asoc = sctp_id2assoc(sk, params.sprstat_assoc_id);
6603 if (!asoc || params.sprstat_sid >= asoc->stream->outcnt) 6603 if (!asoc || params.sprstat_sid >= asoc->stream.outcnt)
6604 goto out; 6604 goto out;
6605 6605
6606 streamout = &asoc->stream->out[params.sprstat_sid]; 6606 streamout = &asoc->stream.out[params.sprstat_sid];
6607 if (policy == SCTP_PR_SCTP_NONE) { 6607 if (policy == SCTP_PR_SCTP_NONE) {
6608 params.sprstat_abandoned_unsent = 0; 6608 params.sprstat_abandoned_unsent = 0;
6609 params.sprstat_abandoned_sent = 0; 6609 params.sprstat_abandoned_sent = 0;