diff options
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/output.c | 24 | ||||
-rw-r--r-- | net/sctp/socket.c | 26 | ||||
-rw-r--r-- | net/sctp/stream.c | 1 |
3 files changed, 9 insertions, 42 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c index 67939ad99c01..b0e74a3e77ec 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -118,6 +118,9 @@ void sctp_packet_config(struct sctp_packet *packet, __u32 vtag, | |||
118 | sctp_transport_route(tp, NULL, sp); | 118 | sctp_transport_route(tp, NULL, sp); |
119 | if (asoc->param_flags & SPP_PMTUD_ENABLE) | 119 | if (asoc->param_flags & SPP_PMTUD_ENABLE) |
120 | sctp_assoc_sync_pmtu(asoc); | 120 | sctp_assoc_sync_pmtu(asoc); |
121 | } else if (!sctp_transport_pmtu_check(tp)) { | ||
122 | if (asoc->param_flags & SPP_PMTUD_ENABLE) | ||
123 | sctp_assoc_sync_pmtu(asoc); | ||
121 | } | 124 | } |
122 | 125 | ||
123 | if (asoc->pmtu_pending) { | 126 | if (asoc->pmtu_pending) { |
@@ -396,25 +399,6 @@ finish: | |||
396 | return retval; | 399 | return retval; |
397 | } | 400 | } |
398 | 401 | ||
399 | static void sctp_packet_release_owner(struct sk_buff *skb) | ||
400 | { | ||
401 | sk_free(skb->sk); | ||
402 | } | ||
403 | |||
404 | static void sctp_packet_set_owner_w(struct sk_buff *skb, struct sock *sk) | ||
405 | { | ||
406 | skb_orphan(skb); | ||
407 | skb->sk = sk; | ||
408 | skb->destructor = sctp_packet_release_owner; | ||
409 | |||
410 | /* | ||
411 | * The data chunks have already been accounted for in sctp_sendmsg(), | ||
412 | * therefore only reserve a single byte to keep socket around until | ||
413 | * the packet has been transmitted. | ||
414 | */ | ||
415 | refcount_inc(&sk->sk_wmem_alloc); | ||
416 | } | ||
417 | |||
418 | static void sctp_packet_gso_append(struct sk_buff *head, struct sk_buff *skb) | 402 | static void sctp_packet_gso_append(struct sk_buff *head, struct sk_buff *skb) |
419 | { | 403 | { |
420 | if (SCTP_OUTPUT_CB(head)->last == head) | 404 | if (SCTP_OUTPUT_CB(head)->last == head) |
@@ -601,7 +585,7 @@ int sctp_packet_transmit(struct sctp_packet *packet, gfp_t gfp) | |||
601 | if (!head) | 585 | if (!head) |
602 | goto out; | 586 | goto out; |
603 | skb_reserve(head, packet->overhead + MAX_HEADER); | 587 | skb_reserve(head, packet->overhead + MAX_HEADER); |
604 | sctp_packet_set_owner_w(head, sk); | 588 | skb_set_owner_w(head, sk); |
605 | 589 | ||
606 | /* set sctp header */ | 590 | /* set sctp header */ |
607 | sh = skb_push(head, sizeof(struct sctphdr)); | 591 | sh = skb_push(head, sizeof(struct sctphdr)); |
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 739f3e50120d..bf618d1b41fd 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
@@ -3940,32 +3940,16 @@ static int sctp_setsockopt_pr_supported(struct sock *sk, | |||
3940 | unsigned int optlen) | 3940 | unsigned int optlen) |
3941 | { | 3941 | { |
3942 | struct sctp_assoc_value params; | 3942 | struct sctp_assoc_value params; |
3943 | struct sctp_association *asoc; | ||
3944 | int retval = -EINVAL; | ||
3945 | 3943 | ||
3946 | if (optlen != sizeof(params)) | 3944 | if (optlen != sizeof(params)) |
3947 | goto out; | 3945 | return -EINVAL; |
3948 | |||
3949 | if (copy_from_user(¶ms, optval, optlen)) { | ||
3950 | retval = -EFAULT; | ||
3951 | goto out; | ||
3952 | } | ||
3953 | |||
3954 | asoc = sctp_id2assoc(sk, params.assoc_id); | ||
3955 | if (asoc) { | ||
3956 | asoc->prsctp_enable = !!params.assoc_value; | ||
3957 | } else if (!params.assoc_id) { | ||
3958 | struct sctp_sock *sp = sctp_sk(sk); | ||
3959 | 3946 | ||
3960 | sp->ep->prsctp_enable = !!params.assoc_value; | 3947 | if (copy_from_user(¶ms, optval, optlen)) |
3961 | } else { | 3948 | return -EFAULT; |
3962 | goto out; | ||
3963 | } | ||
3964 | 3949 | ||
3965 | retval = 0; | 3950 | sctp_sk(sk)->ep->prsctp_enable = !!params.assoc_value; |
3966 | 3951 | ||
3967 | out: | 3952 | return 0; |
3968 | return retval; | ||
3969 | } | 3953 | } |
3970 | 3954 | ||
3971 | static int sctp_setsockopt_default_prinfo(struct sock *sk, | 3955 | static int sctp_setsockopt_default_prinfo(struct sock *sk, |
diff --git a/net/sctp/stream.c b/net/sctp/stream.c index ffb940d3b57c..3892e7630f3a 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c | |||
@@ -535,7 +535,6 @@ int sctp_send_add_streams(struct sctp_association *asoc, | |||
535 | goto out; | 535 | goto out; |
536 | } | 536 | } |
537 | 537 | ||
538 | stream->incnt = incnt; | ||
539 | stream->outcnt = outcnt; | 538 | stream->outcnt = outcnt; |
540 | 539 | ||
541 | asoc->strreset_outstanding = !!out + !!in; | 540 | asoc->strreset_outstanding = !!out + !!in; |