diff options
author | David S. Miller <davem@davemloft.net> | 2008-07-08 19:30:17 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-08 19:30:17 -0400 |
commit | 7c3ceb4a409e2b838700edf081d61a8a4c921e79 (patch) | |
tree | 4dbf54cc23d2796b278e22fc6f5460b9b451c956 /net/sctp | |
parent | 54dceb008ffcbe003bea9017cad1227a83b6fc3f (diff) | |
parent | b2238566401f01eb796e75750213c7b0fce396b2 (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
drivers/net/wireless/iwlwifi/iwl-3945.c
net/mac80211/mlme.c
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/sm_statefuns.c | 9 | ||||
-rw-r--r-- | net/sctp/ulpevent.c | 5 |
2 files changed, 8 insertions, 6 deletions
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c index b66a41d03c0d..8848d329aa2c 100644 --- a/net/sctp/sm_statefuns.c +++ b/net/sctp/sm_statefuns.c | |||
@@ -5893,12 +5893,6 @@ static int sctp_eat_data(const struct sctp_association *asoc, | |||
5893 | return SCTP_IERROR_NO_DATA; | 5893 | return SCTP_IERROR_NO_DATA; |
5894 | } | 5894 | } |
5895 | 5895 | ||
5896 | /* If definately accepting the DATA chunk, record its TSN, otherwise | ||
5897 | * wait for renege processing. | ||
5898 | */ | ||
5899 | if (SCTP_CMD_CHUNK_ULP == deliver) | ||
5900 | sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_TSN, SCTP_U32(tsn)); | ||
5901 | |||
5902 | chunk->data_accepted = 1; | 5896 | chunk->data_accepted = 1; |
5903 | 5897 | ||
5904 | /* Note: Some chunks may get overcounted (if we drop) or overcounted | 5898 | /* Note: Some chunks may get overcounted (if we drop) or overcounted |
@@ -5918,6 +5912,9 @@ static int sctp_eat_data(const struct sctp_association *asoc, | |||
5918 | * and discard the DATA chunk. | 5912 | * and discard the DATA chunk. |
5919 | */ | 5913 | */ |
5920 | if (ntohs(data_hdr->stream) >= asoc->c.sinit_max_instreams) { | 5914 | if (ntohs(data_hdr->stream) >= asoc->c.sinit_max_instreams) { |
5915 | /* Mark tsn as received even though we drop it */ | ||
5916 | sctp_add_cmd_sf(commands, SCTP_CMD_REPORT_TSN, SCTP_U32(tsn)); | ||
5917 | |||
5921 | err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM, | 5918 | err = sctp_make_op_error(asoc, chunk, SCTP_ERROR_INV_STRM, |
5922 | &data_hdr->stream, | 5919 | &data_hdr->stream, |
5923 | sizeof(data_hdr->stream)); | 5920 | sizeof(data_hdr->stream)); |
diff --git a/net/sctp/ulpevent.c b/net/sctp/ulpevent.c index ce6cda6b6994..a1f654aea268 100644 --- a/net/sctp/ulpevent.c +++ b/net/sctp/ulpevent.c | |||
@@ -710,6 +710,11 @@ struct sctp_ulpevent *sctp_ulpevent_make_rcvmsg(struct sctp_association *asoc, | |||
710 | if (!skb) | 710 | if (!skb) |
711 | goto fail; | 711 | goto fail; |
712 | 712 | ||
713 | /* Now that all memory allocations for this chunk succeeded, we | ||
714 | * can mark it as received so the tsn_map is updated correctly. | ||
715 | */ | ||
716 | sctp_tsnmap_mark(&asoc->peer.tsn_map, ntohl(chunk->subh.data_hdr->tsn)); | ||
717 | |||
713 | /* First calculate the padding, so we don't inadvertently | 718 | /* First calculate the padding, so we don't inadvertently |
714 | * pass up the wrong length to the user. | 719 | * pass up the wrong length to the user. |
715 | * | 720 | * |