Re: bad slaves count in eql driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux