linux/net/sctp
Vlad Yasevich 619a60ee04 sctp: Remove outqueue empty state
The SCTP outqueue structure maintains a data chunks
that are pending transmission, the list of chunks that
are pending a retransmission and a length of data in
flight.  It also tries to keep the emtpy state so that
it can performe shutdown sequence or notify user.

The problem is that the empy state is inconsistently
tracked.  It is possible to completely drain the queue
without sending anything when using PR-SCTP.  In this
case, the empty state will not be correctly state as
report by Jamal Hadi Salim <jhs@mojatatu.com>.  This
can cause an association to be perminantly stuck in the
SHUTDOWN_PENDING state.

Additionally, SCTP is incredibly inefficient when setting
the empty state.  Even though all the data is availaible
in the outqueue structure, we ignore it and walk a list
of trasnports.

In the end, we can completely remove the extra empty
state and figure out if the queue is empty by looking
at 3 things:  length of pending data, length of in-flight
data, and exisiting of retransmit data.  All of these
are already in the strucutre.

Reported-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Vlad Yasevich <vyasevich@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-01-02 17:22:48 -05:00
..
associola.c sctp: properly latch and use autoclose value from sock to association 2013-12-10 22:41:26 -05:00
auth.c sctp: merge two if statements to one 2013-10-28 01:02:34 -04:00
bind_addr.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
chunk.c sctp: fix some comments in chunk.c and associola.c 2013-10-28 01:02:34 -04:00
command.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
debug.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
endpointola.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
input.c net: sctp: rfc4443: do not report ICMP redirects to user space 2013-09-16 21:40:15 -04:00
inqueue.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
ipv6.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-11-04 13:48:30 -05:00
Kconfig net: sctp: get rid of SCTP_DBG_TSNS entirely 2013-07-02 00:08:03 -07:00
Makefile
objcnt.c seq_file: remove "%n" usage from seq_file users 2013-11-15 09:32:20 +09:00
output.c sctp: properly latch and use autoclose value from sock to association 2013-12-10 22:41:26 -05:00
outqueue.c sctp: Remove outqueue empty state 2014-01-02 17:22:48 -05:00
primitive.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
probe.c sctp: loading sctp when load sctp_probe 2013-12-16 20:04:27 -05:00
proc.c net: proc_fs: trivial: print UIDs as unsigned int 2013-08-15 14:37:46 -07:00
protocol.c Revert "net: sctp: convert sctp_checksum_disable module param into sctp sysctl" 2013-08-09 13:09:41 -07:00
sm_make_chunk.c sctp: remove the repeat initialize with 0 2013-10-28 01:02:34 -04:00
sm_sideeffect.c net: sctp: do not trigger BUG_ON in sctp_cmd_delete_tcb 2013-11-04 00:46:44 -05:00
sm_statefuns.c sctp: properly latch and use autoclose value from sock to association 2013-12-10 22:41:26 -05:00
sm_statetable.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
socket.c sctp: check the rto_min and rto_max in setsockopt 2013-12-10 22:54:34 -05:00
ssnmap.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
sysctl.c sctp: fix up a spacing 2013-12-10 22:54:34 -05:00
transport.c sctp: disable max_burst when the max_burst is 0 2013-12-05 20:55:54 -05:00
tsnmap.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
ulpevent.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00
ulpqueue.c net: sctp: trivial: update bug report in header comment 2013-08-09 11:33:02 -07:00