|
@@ -660,13 +660,9 @@ struct sctp_transport *sctp_assoc_add_peer(struct sctp_association *asoc,
|
|
|
* If not and the current association PMTU is higher than the new
|
|
|
* peer's PMTU, reset the association PMTU to the new peer's PMTU.
|
|
|
*/
|
|
|
- if (asoc->pathmtu)
|
|
|
- asoc->pathmtu = min_t(int, peer->pathmtu, asoc->pathmtu);
|
|
|
- else
|
|
|
- asoc->pathmtu = peer->pathmtu;
|
|
|
-
|
|
|
- pr_debug("%s: association:%p PMTU set to %d\n", __func__, asoc,
|
|
|
- asoc->pathmtu);
|
|
|
+ sctp_assoc_set_pmtu(asoc, asoc->pathmtu ?
|
|
|
+ min_t(int, peer->pathmtu, asoc->pathmtu) :
|
|
|
+ peer->pathmtu);
|
|
|
|
|
|
peer->pmtu_pending = 0;
|
|
|
|
|
@@ -1374,6 +1370,15 @@ sctp_assoc_choose_alter_transport(struct sctp_association *asoc,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+void sctp_assoc_set_pmtu(struct sctp_association *asoc, __u32 pmtu)
|
|
|
+{
|
|
|
+ if (asoc->pathmtu != pmtu)
|
|
|
+ asoc->pathmtu = pmtu;
|
|
|
+
|
|
|
+ pr_debug("%s: asoc:%p, pmtu:%d, frag_point:%d\n", __func__, asoc,
|
|
|
+ asoc->pathmtu, asoc->frag_point);
|
|
|
+}
|
|
|
+
|
|
|
/* Update the association's pmtu and frag_point by going through all the
|
|
|
* transports. This routine is called when a transport's PMTU has changed.
|
|
|
*/
|
|
@@ -1397,7 +1402,7 @@ void sctp_assoc_sync_pmtu(struct sctp_association *asoc)
|
|
|
pmtu = t->pathmtu;
|
|
|
}
|
|
|
|
|
|
- asoc->pathmtu = pmtu;
|
|
|
+ sctp_assoc_set_pmtu(asoc, pmtu);
|
|
|
asoc->frag_point = sctp_frag_point(asoc, pmtu);
|
|
|
|
|
|
pr_debug("%s: asoc:%p, pmtu:%d, frag_point:%d\n", __func__, asoc,
|