Thread (1 message) 1 message, 1 author, 2006-07-03
DORMANTno replies

[patch 7/7] net_device list cleanup: debugging

From: Andrey Savochkin <hidden>
Date: 2006-07-03 16:32:01

Optional code to catch cases when loop cursor is used after for_each_netdev
loop: often it's a sign of a bug, since it isn't guaranteed to point to a
device.

Signed-off-by: Andrey Savochkin <redacted>
---
If anyone wants to keep this under some debug config option,
let me know which one.

 netdevice.h |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletion(-)
--- ./include/linux/netdevice.h.vedevbase-dbg	Mon Jul  3 16:16:51 2006
+++ ./include/linux/netdevice.h	Mon Jul  3 16:16:51 2006
@@ -560,7 +560,13 @@ extern struct net_device		loopback_dev;	
 extern struct list_head			dev_base_head;		/* All devices */
 extern rwlock_t				dev_base_lock;		/* Device list lock */
 
-#define for_each_netdev(p)	list_for_each_entry(p, &dev_base_head, dev_list)
+#define for_each_netdev(pos)	\
+for (pos = list_entry(dev_base_head.next, typeof(*pos), dev_list); \
+     prefetch(pos->dev_list.next), \
+	&pos->dev_list != &dev_base_head ? : \
+		({ void *__check_dev_use_after_for_each_netdev; \
+		   pos = __check_dev_use_after_for_each_netdev; 0; }); \
+     pos = list_entry(pos->dev_list.next, typeof(*pos), dev_list))
 
 /*
  * When possible, it is preferrable to use for_each_netdev() loop
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help