Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Conflicts: drivers/net/ethernet/emulex/benet/be_main.c drivers/net/ethernet/intel/igb/igb_main.c drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c include/net/scm.h net/batman-adv/routing.c net/ipv4/tcp_input.c The e{uid,gid} --> {uid,gid} credentials fix conflicted with the cleanup in net-next to now pass cred structs around. The be2net driver had a bug fix in 'net' that overlapped with the VLAN interface changes by Patrick McHardy in net-next. An IGB conflict existed because in 'net' the build_skb() support was reverted, and in 'net-next' there was a comment style fix within that code. Several batman-adv conflicts were resolved by making sure that all calls to batadv_is_my_mac() are changed to have a new bat_priv first argument. Eric Dumazet's TS ECR fix in TCP in 'net' conflicted with the F-RTO rewrite in 'net-next', mostly overlapping changes. Thanks to Stephen Rothwell and Antonio Quartulli for help with several of these merge resolutions. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
6e0895c2ea
345 changed files with 3680 additions and 2384 deletions
|
@ -587,13 +587,16 @@ static void check_lifetime(struct work_struct *work)
|
|||
{
|
||||
unsigned long now, next, next_sec, next_sched;
|
||||
struct in_ifaddr *ifa;
|
||||
struct hlist_node *n;
|
||||
int i;
|
||||
|
||||
now = jiffies;
|
||||
next = round_jiffies_up(now + ADDR_CHECK_FREQUENCY);
|
||||
|
||||
rcu_read_lock();
|
||||
for (i = 0; i < IN4_ADDR_HSIZE; i++) {
|
||||
bool change_needed = false;
|
||||
|
||||
rcu_read_lock();
|
||||
hlist_for_each_entry_rcu(ifa, &inet_addr_lst[i], hash) {
|
||||
unsigned long age;
|
||||
|
||||
|
@ -606,16 +609,7 @@ static void check_lifetime(struct work_struct *work)
|
|||
|
||||
if (ifa->ifa_valid_lft != INFINITY_LIFE_TIME &&
|
||||
age >= ifa->ifa_valid_lft) {
|
||||
struct in_ifaddr **ifap ;
|
||||
|
||||
rtnl_lock();
|
||||
for (ifap = &ifa->ifa_dev->ifa_list;
|
||||
*ifap != NULL; ifap = &ifa->ifa_next) {
|
||||
if (*ifap == ifa)
|
||||
inet_del_ifa(ifa->ifa_dev,
|
||||
ifap, 1);
|
||||
}
|
||||
rtnl_unlock();
|
||||
change_needed = true;
|
||||
} else if (ifa->ifa_preferred_lft ==
|
||||
INFINITY_LIFE_TIME) {
|
||||
continue;
|
||||
|
@ -625,10 +619,8 @@ static void check_lifetime(struct work_struct *work)
|
|||
next = ifa->ifa_tstamp +
|
||||
ifa->ifa_valid_lft * HZ;
|
||||
|
||||
if (!(ifa->ifa_flags & IFA_F_DEPRECATED)) {
|
||||
ifa->ifa_flags |= IFA_F_DEPRECATED;
|
||||
rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
|
||||
}
|
||||
if (!(ifa->ifa_flags & IFA_F_DEPRECATED))
|
||||
change_needed = true;
|
||||
} else if (time_before(ifa->ifa_tstamp +
|
||||
ifa->ifa_preferred_lft * HZ,
|
||||
next)) {
|
||||
|
@ -636,8 +628,42 @@ static void check_lifetime(struct work_struct *work)
|
|||
ifa->ifa_preferred_lft * HZ;
|
||||
}
|
||||
}
|
||||
rcu_read_unlock();
|
||||
if (!change_needed)
|
||||
continue;
|
||||
rtnl_lock();
|
||||
hlist_for_each_entry_safe(ifa, n, &inet_addr_lst[i], hash) {
|
||||
unsigned long age;
|
||||
|
||||
if (ifa->ifa_flags & IFA_F_PERMANENT)
|
||||
continue;
|
||||
|
||||
/* We try to batch several events at once. */
|
||||
age = (now - ifa->ifa_tstamp +
|
||||
ADDRCONF_TIMER_FUZZ_MINUS) / HZ;
|
||||
|
||||
if (ifa->ifa_valid_lft != INFINITY_LIFE_TIME &&
|
||||
age >= ifa->ifa_valid_lft) {
|
||||
struct in_ifaddr **ifap;
|
||||
|
||||
for (ifap = &ifa->ifa_dev->ifa_list;
|
||||
*ifap != NULL; ifap = &(*ifap)->ifa_next) {
|
||||
if (*ifap == ifa) {
|
||||
inet_del_ifa(ifa->ifa_dev,
|
||||
ifap, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else if (ifa->ifa_preferred_lft !=
|
||||
INFINITY_LIFE_TIME &&
|
||||
age >= ifa->ifa_preferred_lft &&
|
||||
!(ifa->ifa_flags & IFA_F_DEPRECATED)) {
|
||||
ifa->ifa_flags |= IFA_F_DEPRECATED;
|
||||
rtmsg_ifa(RTM_NEWADDR, ifa, NULL, 0);
|
||||
}
|
||||
}
|
||||
rtnl_unlock();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
next_sec = round_jiffies_up(next);
|
||||
next_sched = next;
|
||||
|
@ -804,6 +830,8 @@ static int inet_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|||
return -EEXIST;
|
||||
ifa = ifa_existing;
|
||||
set_ifa_lifetime(ifa, valid_lft, prefered_lft);
|
||||
cancel_delayed_work(&check_lifetime_work);
|
||||
schedule_delayed_work(&check_lifetime_work, 0);
|
||||
rtmsg_ifa(RTM_NEWADDR, ifa, nlh, NETLINK_CB(skb).portid);
|
||||
blocking_notifier_call_chain(&inetaddr_chain, NETDEV_UP, ifa);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue