From: Xin Long
> Sent: 16 August 2016 12:34
>
> >> Both sctp_outq_flush_rtx and sctp_packet_transmit can ONLY
> >> return one error (-ENOMEM), as sctp_outq_flush_rtx also calls
> >> sctp_packet_transmit.
> >
> > What is the effect of the error?
> > If it is 'just' equivalent to a lost ethernet packet (and the skb (etc)
> > is freed) then the protocol will recover.
> > If it is anything else then the error path is probably wrong.
>
> This err returns back to sctp_sendmsg, there sctp will abort asoc.

That doesn't seem a good idea.
You don't want to abort the association if there is a transient
memory allocation failure.
You also can't drop data chunks.

> in this function, sctp tries to do 3 things:
> 1. flush rtx queue
> 2. transmit the packet of current transport
> 3. flush all the transports.
> Now sctp would do them one by one, even if one of them returns err.

You probably need to explain what 'flush' means here.
I think it means 'process and send', but it might mean 'discard the
contents of'.

Last time I looked at the sctp code my head exploded.
ISTR it is a mess of timing errors waiting to happen
(and I write comms protocol stack code for a living).

        David

Reply via email to