25 May, 2007

2 commits


14 May, 2007

1 commit


11 May, 2007

5 commits

  • When we relinquish queue_lock in qdisc_restart and then retake it for
    requeueing, we might race against dev_deactivate and end up requeueing
    onto noop_qdisc. This causes a warning to be printed.

    This patch fixes this by checking this before we requeue. As an added
    bonus, we can remove the same check in __qdisc_run which was added to
    prevent dev->gso_skb from being requeued when we're shutting down.

    Even though we've had to add a new conditional in its place, it's better
    because it only happens on requeues rather than every single time that
    qdisc_run is called.

    For this to work we also need to move the clearing of gso_skb up in
    dev_deactivate as now qdisc_restart can occur even after we wait for
    __LINK_STATE_QDISC_RUNNING to clear (but it won't do anything as long
    as the queue and gso_skb is already clear).

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • Now that we return the queue length after NETDEV_TX_OK we better
    make sure that we have the right queue. Otherwise we can cause a
    stall after a really quick dev_deactive/dev_activate.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • The current return value scheme and associated comment was invented
    back in the 20th century when we still had that tbusy flag. Things
    have changed quite a bit since then (even Tony Blair is moving on
    now, not to mention the new French president).

    All we need to indicate now is whether the caller should continue
    processing the queue. Therefore it's sufficient if we return 0 if
    we want to stop and non-zero otherwise.

    This is based on a patch by Krishna Kumar.

    Signed-off-by: Herbert Xu
    Signed-off-by: David S. Miller

    Herbert Xu
     
  • When transmit fails with NETDEV_TX_LOCKED the skb is requeued
    to dev->qdisc again. The dev->qdisc pointer is protected by
    the queue lock which needs to be dropped when attempting to
    transmit and acquired again before requeing. The problem is
    that qdisc_restart() fetches the dev->qdisc pointer once and
    stores it in the `q' variable which is invalidated when
    dropping the queue_lock, therefore the variable needs to be
    refreshed before requeueing.

    Signed-off-by: Thomas Graf
    Signed-off-by: David S. Miller

    Thomas Graf
     
  • Optimize teql_enqueue so that it first checks limits before enqueing.

    Signed-off-by: Krishna Kumar
    Signed-off-by: David S. Miller

    Krishna Kumar
     

04 May, 2007

1 commit

  • Cleanup of dev_base list use, with the aim to simplify making device
    list per-namespace. In almost every occasion, use of dev_base variable
    and dev->next pointer could be easily replaced by for_each_netdev
    loop. A few most complicated places were converted to using
    first_netdev()/next_netdev().

    Signed-off-by: Pavel Emelianov
    Acked-by: Kirill Korotaev
    Signed-off-by: David S. Miller

    Pavel Emelianov
     

26 Apr, 2007

31 commits