Hi,
I have noticed that the following patch which solve a problem in eql
driver has not been applied in the main tree. It has been sent for the
first time September 9 2004.
The problem it solve is that num_slaves member of slave_queue_t
structure is not correctly decremented each time a slave is removed,
rapidly leading to a situation where you cannot add a slave to the eql
interface while you should.
The file drivers/net/eql.c has not changed for a long so this patch
which originaly was for 2.6.8.1 still apply on 2.6.12.3.
Please consider it for inclusion.
Thank you.
--
Loïc
"heaven is not a place, it's a feeling"
proper num_slaves decrement
Signed-off-by: Loic Le Loarer <[EMAIL PROTECTED]>
---
diff -Nur kernel-source-2.6.8.orig/drivers/net/eql.c
kernel-source-2.6.8/drivers/net/eql.c
--- a/drivers/net/eql.c 2004-08-14 07:37:40.000000000 +0200
+++ b/drivers/net/eql.c 2004-09-04 00:23:43.000000000 +0200
@@ -132,7 +132,7 @@
#define eql_is_slave(dev) ((dev->flags & IFF_SLAVE) == IFF_SLAVE)
#define eql_is_master(dev) ((dev->flags & IFF_MASTER) == IFF_MASTER)
-static void eql_kill_one_slave(slave_t *slave);
+static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave);
static void eql_timer(unsigned long param)
{
@@ -149,7 +149,7 @@
if (slave->bytes_queued < 0)
slave->bytes_queued = 0;
} else {
- eql_kill_one_slave(slave);
+ eql_kill_one_slave(&eql->queue, slave);
}
}
@@ -214,9 +214,10 @@
return 0;
}
-static void eql_kill_one_slave(slave_t *slave)
+static void eql_kill_one_slave(slave_queue_t *queue, slave_t *slave)
{
list_del(&slave->list);
+ queue->num_slaves--;
slave->dev->flags &= ~IFF_SLAVE;
dev_put(slave->dev);
kfree(slave);
@@ -232,8 +233,7 @@
list_for_each_safe(this, tmp, head) {
slave_t *s = list_entry(this, slave_t, list);
- eql_kill_one_slave(s);
- queue->num_slaves--;
+ eql_kill_one_slave(queue, s);
}
spin_unlock_bh(&queue->lock);
@@ -318,7 +318,7 @@
}
} else {
/* We found a dead slave, kill it. */
- eql_kill_one_slave(slave);
+ eql_kill_one_slave(queue, slave);
}
}
return best_slave;
@@ -393,7 +393,7 @@
duplicate_slave = __eql_find_slave_dev(queue, slave->dev);
if (duplicate_slave != 0)
- eql_kill_one_slave(duplicate_slave);
+ eql_kill_one_slave(queue, duplicate_slave);
list_add(&slave->list, &queue->all_slaves);
queue->num_slaves++;
@@ -471,7 +471,7 @@
slave_dev);
if (slave) {
- eql_kill_one_slave(slave);
+ eql_kill_one_slave(&eql->queue, slave);
ret = 0;
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html