lkml.org 
[lkml]   [2011]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[142/272] net_sched: pfifo_head_drop problem
    2.6.37-stable review patch.  If anyone has any objections, please let us know.

    ------------------


    From: Eric Dumazet <eric.dumazet@gmail.com>

    [ Upstream commit 44b8288308ac9da27eab7d7bdbf1375a568805c3 ]

    commit 57dbb2d83d100ea (sched: add head drop fifo queue)
    introduced pfifo_head_drop, and broke the invariant that
    sch->bstats.bytes and sch->bstats.packets are COUNTER (increasing
    counters only)

    This can break estimators because est_timer() handles unsigned deltas
    only. A decreasing counter can then give a huge unsigned delta.

    My mid term suggestion would be to change things so that
    sch->bstats.bytes and sch->bstats.packets are incremented in dequeue()
    only, not at enqueue() time. We also could add drop_bytes/drop_packets
    and provide estimations of drop rates.

    It would be more sensible anyway for very low speeds, and big bursts.
    Right now, if we drop packets, they still are accounted in byte/packets
    abolute counters and rate estimators.

    Before this mid term change, this patch makes pfifo_head_drop behavior
    similar to other qdiscs in case of drops :
    Dont decrement sch->bstats.bytes and sch->bstats.packets

    Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
    Acked-by: Hagen Paul Pfeifer <hagen@jauu.net>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    net/sched/sch_fifo.c | 2 --
    1 file changed, 2 deletions(-)

    --- a/net/sched/sch_fifo.c
    +++ b/net/sched/sch_fifo.c
    @@ -54,8 +54,6 @@ static int pfifo_tail_enqueue(struct sk_

    /* queue full, remove one skb to fulfill the limit */
    skb_head = qdisc_dequeue_head(sch);
    - sch->bstats.bytes -= qdisc_pkt_len(skb_head);
    - sch->bstats.packets--;
    sch->qstats.drops++;
    kfree_skb(skb_head);




    \
     
     \ /
      Last update: 2011-02-16 02:29    [W:0.032 / U:29.952 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site