• Vlad Yasevich's avatar
    sctp: Remove outqueue empty state · 619a60ee
    Vlad Yasevich authored
    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: default avatarJamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: default avatarVlad Yasevich <vyasevich@gmail.com>
    Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
    Tested-by: default avatarJamal Hadi Salim <jhs@mojatatu.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    619a60ee
structs.h 60.7 KB