Krishna Kumar wrote:
> +static inline int get_skb(struct net_device *dev, struct Qdisc *q,
> +                       struct sk_buff_head *blist,
> +                       struct sk_buff **skbp)
> +{
> +     if (likely(!blist) || (!skb_queue_len(blist) && qdisc_qlen(q) <= 1)) {
> +             return likely((*skbp = dev_dequeue_skb(dev, q)) != NULL);
> +     } else {
> +             int max = dev->tx_queue_len - skb_queue_len(blist);


I'm assuming the driver will simply leave excess packets in the
blist for the next run. The check for tx_queue_len is wrong though,
its only a default which can be overriden and some qdiscs don't
care for it at all.

> +             struct sk_buff *skb;
> +
> +             while (max > 0 && (skb = dev_dequeue_skb(dev, q)) != NULL)
> +                     max -= dev_add_skb_to_blist(skb, dev);
> +
> +             *skbp = NULL;
> +             return 1;       /* we have atleast one skb in blist */
> +     }
> +}



> -void __qdisc_run(struct net_device *dev)
> +void __qdisc_run(struct net_device *dev, struct sk_buff_head *blist)


And the patches should really be restructured so this change is
in the same patch changing the header and the caller, for example.

>  {
>       do {
> -             if (!qdisc_restart(dev))
> +             if (!qdisc_restart(dev, blist))
>                       break;
>       } while (!netif_queue_stopped(dev));
>  
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to