|
@@ -3064,14 +3064,15 @@ static struct inet6_ifaddr *if6_get_first(struct seq_file *seq, loff_t pos)
|
|
|
struct hlist_node *n;
|
|
|
hlist_for_each_entry_rcu_bh(ifa, n, &inet6_addr_lst[state->bucket],
|
|
|
addr_lst) {
|
|
|
+ if (!net_eq(dev_net(ifa->idev->dev), net))
|
|
|
+ continue;
|
|
|
/* sync with offset */
|
|
|
if (p < state->offset) {
|
|
|
p++;
|
|
|
continue;
|
|
|
}
|
|
|
state->offset++;
|
|
|
- if (net_eq(dev_net(ifa->idev->dev), net))
|
|
|
- return ifa;
|
|
|
+ return ifa;
|
|
|
}
|
|
|
|
|
|
/* prepare for next bucket */
|
|
@@ -3089,18 +3090,20 @@ static struct inet6_ifaddr *if6_get_next(struct seq_file *seq,
|
|
|
struct hlist_node *n = &ifa->addr_lst;
|
|
|
|
|
|
hlist_for_each_entry_continue_rcu_bh(ifa, n, addr_lst) {
|
|
|
+ if (!net_eq(dev_net(ifa->idev->dev), net))
|
|
|
+ continue;
|
|
|
state->offset++;
|
|
|
- if (net_eq(dev_net(ifa->idev->dev), net))
|
|
|
- return ifa;
|
|
|
+ return ifa;
|
|
|
}
|
|
|
|
|
|
while (++state->bucket < IN6_ADDR_HSIZE) {
|
|
|
state->offset = 0;
|
|
|
hlist_for_each_entry_rcu_bh(ifa, n,
|
|
|
&inet6_addr_lst[state->bucket], addr_lst) {
|
|
|
+ if (!net_eq(dev_net(ifa->idev->dev), net))
|
|
|
+ continue;
|
|
|
state->offset++;
|
|
|
- if (net_eq(dev_net(ifa->idev->dev), net))
|
|
|
- return ifa;
|
|
|
+ return ifa;
|
|
|
}
|
|
|
}
|
|
|
|