Merge branch 'sctp-shrink-stream-outq-in-the-right-place'
Xin Long says: ==================== sctp: shrink stream outq in the right place Patch 1 is an improvement, and Patch 2 is a bug fix. ==================== Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
f659173364
|
@ -22,17 +22,11 @@
|
|||
#include <net/sctp/sm.h>
|
||||
#include <net/sctp/stream_sched.h>
|
||||
|
||||
/* Migrates chunks from stream queues to new stream queues if needed,
|
||||
* but not across associations. Also, removes those chunks to streams
|
||||
* higher than the new max.
|
||||
*/
|
||||
static void sctp_stream_outq_migrate(struct sctp_stream *stream,
|
||||
struct sctp_stream *new, __u16 outcnt)
|
||||
static void sctp_stream_shrink_out(struct sctp_stream *stream, __u16 outcnt)
|
||||
{
|
||||
struct sctp_association *asoc;
|
||||
struct sctp_chunk *ch, *temp;
|
||||
struct sctp_outq *outq;
|
||||
int i;
|
||||
|
||||
asoc = container_of(stream, struct sctp_association, stream);
|
||||
outq = &asoc->outqueue;
|
||||
|
@ -56,6 +50,19 @@ static void sctp_stream_outq_migrate(struct sctp_stream *stream,
|
|||
|
||||
sctp_chunk_free(ch);
|
||||
}
|
||||
}
|
||||
|
||||
/* Migrates chunks from stream queues to new stream queues if needed,
|
||||
* but not across associations. Also, removes those chunks to streams
|
||||
* higher than the new max.
|
||||
*/
|
||||
static void sctp_stream_outq_migrate(struct sctp_stream *stream,
|
||||
struct sctp_stream *new, __u16 outcnt)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (stream->outcnt > outcnt)
|
||||
sctp_stream_shrink_out(stream, outcnt);
|
||||
|
||||
if (new) {
|
||||
/* Here we actually move the old ext stuff into the new
|
||||
|
@ -1037,11 +1044,13 @@ struct sctp_chunk *sctp_process_strreset_resp(
|
|||
nums = ntohs(addstrm->number_of_streams);
|
||||
number = stream->outcnt - nums;
|
||||
|
||||
if (result == SCTP_STRRESET_PERFORMED)
|
||||
if (result == SCTP_STRRESET_PERFORMED) {
|
||||
for (i = number; i < stream->outcnt; i++)
|
||||
SCTP_SO(stream, i)->state = SCTP_STREAM_OPEN;
|
||||
else
|
||||
} else {
|
||||
sctp_stream_shrink_out(stream, number);
|
||||
stream->outcnt = number;
|
||||
}
|
||||
|
||||
*evp = sctp_ulpevent_make_stream_change_event(asoc, flags,
|
||||
0, nums, GFP_ATOMIC);
|
||||
|
|
Loading…
Reference in New Issue