summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <dlezcano@fr.ibm.com>2007-09-12 14:57:09 +0200
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 16:49:18 -0700
commita050c33f4a4d5babaf94a8ba6ae7a200135240b3 (patch)
treed47e7be9cb38e277e767601926e11a432dd86c39
parentabf07acbb9f122218095d0d221e0f949160ccc37 (diff)
downloadlinux-a050c33f4a4d5babaf94a8ba6ae7a200135240b3.tar.bz2
[NETNS]: Fix bad macro definition.
The macro definition is bad. When calling next_net_device with parameter name "dev", the resulting code is: struct net_device *dev = dev and that leads to an unexpected behavior. Especially when llc_core is compiled in, the kernel panics at boot time. The patchset change macro definition with static inline functions as they were defined before. Signed-off-by: Benjamin Thery <benjamin.thery@bull.net> Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/linux/netdevice.h35
1 files changed, 17 insertions, 18 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 407658c64fb6..625240ce27f1 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -41,7 +41,8 @@
#include <linux/dmaengine.h>
#include <linux/workqueue.h>
-struct net;
+#include <net/net_namespace.h>
+
struct vlan_group;
struct ethtool_ops;
struct netpoll_info;
@@ -753,23 +754,21 @@ extern rwlock_t dev_base_lock; /* Device list lock */
list_for_each_entry_continue(d, &(net)->dev_base_head, dev_list)
#define net_device_entry(lh) list_entry(lh, struct net_device, dev_list)
-#define next_net_device(d) \
-({ \
- struct net_device *dev = d; \
- struct list_head *lh; \
- struct net *net; \
- \
- net = dev->nd_net; \
- lh = dev->dev_list.next; \
- lh == &net->dev_base_head ? NULL : net_device_entry(lh); \
-})
-
-#define first_net_device(N) \
-({ \
- struct net *NET = (N); \
- list_empty(&NET->dev_base_head) ? NULL : \
- net_device_entry(NET->dev_base_head.next); \
-})
+static inline struct net_device *next_net_device(struct net_device *dev)
+{
+ struct list_head *lh;
+ struct net *net;
+
+ net = dev->nd_net;
+ lh = dev->dev_list.next;
+ return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
+}
+
+static inline struct net_device *first_net_device(struct net *net)
+{
+ return list_empty(&net->dev_base_head) ? NULL :
+ net_device_entry(net->dev_base_head.next);
+}
extern int netdev_boot_setup_check(struct net_device *dev);
extern unsigned long netdev_boot_base(const char *prefix, int unit);