diff options
Diffstat (limited to 'net/sctp/output.c')
-rw-r--r-- | net/sctp/output.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/net/sctp/output.c b/net/sctp/output.c index 6d45bae93b46..45684646b1db 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
@@ -50,6 +50,7 @@ | |||
50 | #include <linux/init.h> | 50 | #include <linux/init.h> |
51 | #include <net/inet_ecn.h> | 51 | #include <net/inet_ecn.h> |
52 | #include <net/icmp.h> | 52 | #include <net/icmp.h> |
53 | #include <net/net_namespace.h> | ||
53 | 54 | ||
54 | #ifndef TEST_FRAME | 55 | #ifndef TEST_FRAME |
55 | #include <net/tcp.h> | 56 | #include <net/tcp.h> |
@@ -157,7 +158,8 @@ void sctp_packet_free(struct sctp_packet *packet) | |||
157 | * packet can be sent only after receiving the COOKIE_ACK. | 158 | * packet can be sent only after receiving the COOKIE_ACK. |
158 | */ | 159 | */ |
159 | sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet, | 160 | sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet, |
160 | struct sctp_chunk *chunk) | 161 | struct sctp_chunk *chunk, |
162 | int one_packet) | ||
161 | { | 163 | { |
162 | sctp_xmit_t retval; | 164 | sctp_xmit_t retval; |
163 | int error = 0; | 165 | int error = 0; |
@@ -175,7 +177,9 @@ sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet, | |||
175 | /* If we have an empty packet, then we can NOT ever | 177 | /* If we have an empty packet, then we can NOT ever |
176 | * return PMTU_FULL. | 178 | * return PMTU_FULL. |
177 | */ | 179 | */ |
178 | retval = sctp_packet_append_chunk(packet, chunk); | 180 | if (!one_packet) |
181 | retval = sctp_packet_append_chunk(packet, | ||
182 | chunk); | ||
179 | } | 183 | } |
180 | break; | 184 | break; |
181 | 185 | ||
@@ -361,7 +365,7 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
361 | struct sctp_transport *tp = packet->transport; | 365 | struct sctp_transport *tp = packet->transport; |
362 | struct sctp_association *asoc = tp->asoc; | 366 | struct sctp_association *asoc = tp->asoc; |
363 | struct sctphdr *sh; | 367 | struct sctphdr *sh; |
364 | __u32 crc32 = 0; | 368 | __be32 crc32 = __constant_cpu_to_be32(0); |
365 | struct sk_buff *nskb; | 369 | struct sk_buff *nskb; |
366 | struct sctp_chunk *chunk, *tmp; | 370 | struct sctp_chunk *chunk, *tmp; |
367 | struct sock *sk; | 371 | struct sock *sk; |
@@ -534,7 +538,7 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
534 | /* 3) Put the resultant value into the checksum field in the | 538 | /* 3) Put the resultant value into the checksum field in the |
535 | * common header, and leave the rest of the bits unchanged. | 539 | * common header, and leave the rest of the bits unchanged. |
536 | */ | 540 | */ |
537 | sh->checksum = htonl(crc32); | 541 | sh->checksum = crc32; |
538 | 542 | ||
539 | /* IP layer ECN support | 543 | /* IP layer ECN support |
540 | * From RFC 2481 | 544 | * From RFC 2481 |
@@ -592,7 +596,7 @@ out: | |||
592 | return err; | 596 | return err; |
593 | no_route: | 597 | no_route: |
594 | kfree_skb(nskb); | 598 | kfree_skb(nskb); |
595 | IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); | 599 | IP_INC_STATS_BH(&init_net, IPSTATS_MIB_OUTNOROUTES); |
596 | 600 | ||
597 | /* FIXME: Returning the 'err' will effect all the associations | 601 | /* FIXME: Returning the 'err' will effect all the associations |
598 | * associated with a socket, although only one of the paths of the | 602 | * associated with a socket, although only one of the paths of the |