提交 a050c33f 编写于 作者: D Daniel Lezcano 提交者: David S. Miller

[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: NBenjamin Thery <benjamin.thery@bull.net>
Signed-off-by: NDaniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 abf07acb
......@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册