aboutsummaryrefslogtreecommitdiffstats
path: root/net/sctp/associola.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/associola.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/associola.c')
-rw-r--r--net/sctp/associola.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c
index 95238284c422..6625b15ab81a 100644
--- a/net/sctp/associola.c
+++ b/net/sctp/associola.c
@@ -291,7 +291,7 @@ static struct sctp_association *sctp_association_init(struct sctp_association *a
291 return asoc; 291 return asoc;
292 292
293stream_free: 293stream_free:
294 sctp_stream_free(asoc->stream); 294 sctp_stream_free(&asoc->stream);
295fail_init: 295fail_init:
296 sock_put(asoc->base.sk); 296 sock_put(asoc->base.sk);
297 sctp_endpoint_put(asoc->ep); 297 sctp_endpoint_put(asoc->ep);
@@ -365,7 +365,7 @@ void sctp_association_free(struct sctp_association *asoc)
365 sctp_tsnmap_free(&asoc->peer.tsn_map); 365 sctp_tsnmap_free(&asoc->peer.tsn_map);
366 366
367 /* Free stream information. */ 367 /* Free stream information. */
368 sctp_stream_free(asoc->stream); 368 sctp_stream_free(&asoc->stream);
369 369
370 if (asoc->strreset_chunk) 370 if (asoc->strreset_chunk)
371 sctp_chunk_free(asoc->strreset_chunk); 371 sctp_chunk_free(asoc->strreset_chunk);
@@ -1151,7 +1151,7 @@ void sctp_assoc_update(struct sctp_association *asoc,
1151 /* Reinitialize SSN for both local streams 1151 /* Reinitialize SSN for both local streams
1152 * and peer's streams. 1152 * and peer's streams.
1153 */ 1153 */
1154 sctp_stream_clear(asoc->stream); 1154 sctp_stream_clear(&asoc->stream);
1155 1155
1156 /* Flush the ULP reassembly and ordered queue. 1156 /* Flush the ULP reassembly and ordered queue.
1157 * Any data there will now be stale and will 1157 * Any data there will now be stale and will
@@ -1177,11 +1177,8 @@ void sctp_assoc_update(struct sctp_association *asoc,
1177 asoc->ctsn_ack_point = asoc->next_tsn - 1; 1177 asoc->ctsn_ack_point = asoc->next_tsn - 1;
1178 asoc->adv_peer_ack_point = asoc->ctsn_ack_point; 1178 asoc->adv_peer_ack_point = asoc->ctsn_ack_point;
1179 1179
1180 if (sctp_state(asoc, COOKIE_WAIT)) { 1180 if (sctp_state(asoc, COOKIE_WAIT))
1181 sctp_stream_free(asoc->stream); 1181 sctp_stream_update(&asoc->stream, &new->stream);
1182 asoc->stream = new->stream;
1183 new->stream = NULL;
1184 }
1185 1182
1186 if (!asoc->assoc_id) { 1183 if (!asoc->assoc_id) {
1187 /* get a new association id since we don't have one 1184 /* get a new association id since we don't have one