Le Friday 03 September 2004 à 09:47:59 -0700, David S. Miller a écrit: > Why not just decrement the counter in *_kill_one_slave()? Sure, it would be better, but num_slaves is a member of struct slave_queue which is not given in the arguments of eql_kill_one_slave and the decrement already appears after one of the eql_kill_one_slave calls, so I correct the situation the same way, which is also the fastest way. I agree it should be better for futur to decrement the counter in eql_kill_one_slave, this require to add the queue or the counter address as an argument to this function, it may seem strange, but it is less error prone and futur proof. So here is a patch which use this method, chose the one you prefer. Thanks. -- Loïc proper num_slaves decrement Signed-off-by: Loïc Le Loarer <loic.le-loarer+lk@polytechnique.org> --- 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; } } - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html