Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 236713
b: refs/heads/master
c: ccf4343
h: refs/heads/master
i:
  236711: e36105c
v: v3
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Jan 27, 2011
1 parent cd69903 commit e05f62d
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 065825402c058f4a123ddc53dbbe864cc5caaf64
refs/heads/master: ccf434380d1a67df2dcb9113206b77d0cb0a1cef
9 changes: 8 additions & 1 deletion trunk/include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -1447,7 +1447,7 @@ static inline struct net_device *next_net_device_rcu(struct net_device *dev)
struct net *net;

net = dev_net(dev);
lh = rcu_dereference(dev->dev_list.next);
lh = rcu_dereference(list_next_rcu(&dev->dev_list));
return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
}

Expand All @@ -1457,6 +1457,13 @@ static inline struct net_device *first_net_device(struct net *net)
net_device_entry(net->dev_base_head.next);
}

static inline struct net_device *first_net_device_rcu(struct net *net)
{
struct list_head *lh = rcu_dereference(list_next_rcu(&net->dev_base_head));

return lh == &net->dev_base_head ? NULL : net_device_entry(lh);
}

extern int netdev_boot_setup_check(struct net_device *dev);
extern unsigned long netdev_boot_base(const char *prefix, int unit);
extern struct net_device *dev_getbyhwaddr_rcu(struct net *net, unsigned short type,
Expand Down
11 changes: 7 additions & 4 deletions trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -4051,12 +4051,15 @@ void *dev_seq_start(struct seq_file *seq, loff_t *pos)

void *dev_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{
struct net_device *dev = (v == SEQ_START_TOKEN) ?
first_net_device(seq_file_net(seq)) :
next_net_device((struct net_device *)v);
struct net_device *dev = v;

if (v == SEQ_START_TOKEN)
dev = first_net_device_rcu(seq_file_net(seq));
else
dev = next_net_device_rcu(dev);

++*pos;
return rcu_dereference(dev);
return dev;
}

void dev_seq_stop(struct seq_file *seq, void *v)
Expand Down

0 comments on commit e05f62d

Please sign in to comment.