Messages in this thread | | | Date | Tue, 15 Apr 2008 15:59:24 +0400 | From | Alexey Kuznetsov <> | Subject | Re: [RFC][PATCH][NET] Fix never pruned tcp out-of-order queue |
| |
Hello!
> I still think the guards are pretty much the same as before, sorry:)
Guards inside tcp_prune_queue() are the same exactly.
But the patch adds the second point where out-of-order queue is discarded. It is when the socket is under rcvbuf, but nevertheless skb cannot be queued due to system-wide limit. In that case out-of-order queue is dropped and the limits are rechecked.
> But why not repeat the whole prune for all cases in this case then?
Collapsing and tuning rcv_ssthresh was done once, they are not guarded by rcvbuf check. So, repeating those steps would be useless.
The only thing is:
> e.g. you should probably at least repeat the third step (setting > pred_flags to 0) too.
Formally, this is correct. But this is not necessary, pred_flags reset is redundant even in the first place. The fast path is not so fast, memory limit is checked explicitly there.
The patch is not perfect. F.e. tcp_prune_ofo_queue() could see empty out-of-order queue, in this case the second sk_stream_rmem_schedule() is useless and could be skipped. But it is the second order effect.
I think this will work.
| |