diff options
author | Lee A. Roberts | 2013-02-28 04:37:30 +0000 |
---|---|---|
committer | David S. Miller | 2013-02-28 15:34:27 -0500 |
commit | d003b41b801124b96337973b01eada6a83673d23 (patch) | |
tree | 726fb6ef8bff813011a19098dd374ce1707edae4 /net/nonet.c | |
parent | 95ac7b859f508b1b3e6adf7dce307864e4384a69 (diff) |
sctp: fix association hangs due to partial delivery errors
In sctp_ulpq_tail_data(), use return values 0,1 to indicate whether
a complete event (with MSG_EOR set) was delivered. A return value
of -ENOMEM continues to indicate an out-of-memory condition was
encountered.
In sctp_ulpq_retrieve_partial() and sctp_ulpq_retrieve_first(),
correct message reassembly logic for SCTP partial delivery.
Change logic to ensure that as much data as possible is sent
with the initial partial delivery and that following partial
deliveries contain all available data.
In sctp_ulpq_partial_delivery(), attempt partial delivery only
if the data on the head of the reassembly queue is at or before
the cumulative TSN ACK point.
In sctp_ulpq_renege(), use the modified return values from
sctp_ulpq_tail_data() to choose whether to attempt partial
delivery or to attempt to drain the reassembly queue as a
means to reduce memory pressure. Remove call to
sctp_tsnmap_mark(), as this is handled correctly in call to
sctp_ulpq_tail_data().
Signed-off-by: Lee A. Roberts <lee.roberts@hp.com>
Acked-by: Vlad Yasevich <vyasevich@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Diffstat (limited to 'net/nonet.c')
0 files changed, 0 insertions, 0 deletions