On Mon, 20 Sep 2004 23:53:15 +0300 (EEST)
Kai Makisara <Kai.Makisara@xxxxxxxxxxx> wrote:
> When I started large data transfers in 100 Mb/s network, my computer very
> soon locked totally (i.e., not responding to network, keyboard and mouse
> dead). This had not happened for several days with 2.6.9-rc2 when the
> network activity had been light (1 Mb/s DSL).
>
> Some experimentation showed that the lockups were caused by this patch
> fragment in 2.6.9-rc2:
Please make sure you have this patch in your
tree, it should fix your problem:
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
# 2004/09/13 12:58:04-07:00 ak@xxxxxx
# [NET]: Fix missing spin lock in lltx path.
#
# This fixes a silly missing spin lock in the relock path. For some
# reason it seems to still work when you don't have spinlock debugging
# enabled.
#
# Please apply.
#
# Thanks to Arjan's spinlock debug kernel for finding it.
#
# Signed-off-by: Andi Kleen <ak@xxxxxx>
# Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
#
# net/sched/sch_generic.c
# 2004/09/13 12:57:46-07:00 ak@xxxxxx +3 -1
# [NET]: Fix missing spin lock in lltx path.
#
# This fixes a silly missing spin lock in the relock path. For some
# reason it seems to still work when you don't have spinlock debugging
# enabled.
#
# Please apply.
#
# Thanks to Arjan's spinlock debug kernel for finding it.
#
# Signed-off-by: Andi Kleen <ak@xxxxxx>
# Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
#
diff -Nru a/net/sched/sch_generic.c b/net/sched/sch_generic.c
--- a/net/sched/sch_generic.c 2004-09-20 13:36:19 -07:00
+++ b/net/sched/sch_generic.c 2004-09-20 13:36:19 -07:00
@@ -148,8 +148,10 @@
spin_lock(&dev->queue_lock);
return -1;
}
- if (ret == NETDEV_TX_LOCKED && nolock)
+ if (ret == NETDEV_TX_LOCKED && nolock) {
+ spin_lock(&dev->queue_lock);
goto collision;
+ }
}
/* NETDEV_TX_BUSY - we need to requeue */
|