]> git.baikalelectronics.ru Git - kernel.git/commit
sctp: Remove outqueue empty state
authorVlad Yasevich <vyasevich@gmail.com>
Thu, 2 Jan 2014 19:39:44 +0000 (14:39 -0500)
committerDavid S. Miller <davem@davemloft.net>
Thu, 2 Jan 2014 22:22:48 +0000 (17:22 -0500)
commit0c40b0df464d3f5056d7a6bdfee6d5b087ef6c18
tree15fe2a92ab11f78469be267d5e3b3c8e3d857a2d
parent45c702dd03f0ab3042442b596d97749d2fdd68e1
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>
include/net/sctp/structs.h
net/sctp/outqueue.c