diff options
| author | David S. Miller <davem@davemloft.net> | 2018-01-09 10:37:00 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2018-01-09 10:37:00 -0500 |
| commit | a0ce093180f2bbb832b3f5583adc640ad67ea568 (patch) | |
| tree | 62c9aca5be3566ea4810e4584a02870de8b953f8 /net/sctp/input.c | |
| parent | f4803f1b73f877a571be4c8e531dfcf190acc691 (diff) | |
| parent | ef7f8cec80a0ba7bd00ece46844c8994117dc910 (diff) | |
| download | talos-op-linux-a0ce093180f2bbb832b3f5583adc640ad67ea568.tar.gz talos-op-linux-a0ce093180f2bbb832b3f5583adc640ad67ea568.zip | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'net/sctp/input.c')
| -rw-r--r-- | net/sctp/input.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/net/sctp/input.c b/net/sctp/input.c index 621b5ca3fd1c..141c9c466ec1 100644 --- a/net/sctp/input.c +++ b/net/sctp/input.c @@ -399,20 +399,24 @@ void sctp_icmp_frag_needed(struct sock *sk, struct sctp_association *asoc, return; } - if (t->param_flags & SPP_PMTUD_ENABLE) { - /* Update transports view of the MTU */ - sctp_transport_update_pmtu(t, pmtu); - - /* Update association pmtu. */ - sctp_assoc_sync_pmtu(asoc); - } + if (!(t->param_flags & SPP_PMTUD_ENABLE)) + /* We can't allow retransmitting in such case, as the + * retransmission would be sized just as before, and thus we + * would get another icmp, and retransmit again. + */ + return; - /* Retransmit with the new pmtu setting. - * Normally, if PMTU discovery is disabled, an ICMP Fragmentation - * Needed will never be sent, but if a message was sent before - * PMTU discovery was disabled that was larger than the PMTU, it - * would not be fragmented, so it must be re-transmitted fragmented. + /* Update transports view of the MTU. Return if no update was needed. + * If an update wasn't needed/possible, it also doesn't make sense to + * try to retransmit now. */ + if (!sctp_transport_update_pmtu(t, pmtu)) + return; + + /* Update association pmtu. */ + sctp_assoc_sync_pmtu(asoc); + + /* Retransmit with the new pmtu setting. */ sctp_retransmit(&asoc->outqueue, t, SCTP_RTXR_PMTUD); } |

