mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org, linux@roeck-us.net
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>,
	Stephen Hemminger <stephen@networkplumber.org>,
	"David S . Miller" <davem@davemloft.net>,
	Mike Manning <mmanning@brocade.com>, Willy Tarreau <w@1wt.eu>
Subject: [PATCH 3.10 221/319] ipv6: move DAD and addrconf_verify processing to workqueue
Date: Sun,  5 Feb 2017 20:20:43 +0100	[thread overview]
Message-ID: <1486322541-8206-122-git-send-email-w@1wt.eu> (raw)
In-Reply-To: <1486322541-8206-1-git-send-email-w@1wt.eu>

From: Hannes Frederic Sowa <hannes@stressinduktion.org>

commit c15b1ccadb323ea50023e8f1cca2954129a62b51 upstream.

addrconf_join_solict and addrconf_join_anycast may cause actions which
need rtnl locked, especially on first address creation.

A new DAD state is introduced which defers processing of the initial
DAD processing into a workqueue.

To get rtnl lock we need to push the code paths which depend on those
calls up to workqueues, specifically addrconf_verify and the DAD
processing.

(v2)
addrconf_dad_failure needs to be queued up to the workqueue, too. This
patch introduces a new DAD state and stop the DAD processing in the
workqueue (this is because of the possible ipv6_del_addr processing
which removes the solicited multicast address from the device).

addrconf_verify_lock is removed, too. After the transition it is not
needed any more.

As we are not processing in bottom half anymore we need to be a bit more
careful about disabling bottom half out when we lock spin_locks which are also
used in bh.

Relevant backtrace:
[  541.030090] RTNL: assertion failed at net/core/dev.c (4496)
[  541.031143] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G           O 3.10.33-1-amd64-vyatta #1
[  541.031145] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
[  541.031146]  ffffffff8148a9f0 000000000000002f ffffffff813c98c1 ffff88007c4451f8
[  541.031148]  0000000000000000 0000000000000000 ffffffff813d3540 ffff88007fc03d18
[  541.031150]  0000880000000006 ffff88007c445000 ffffffffa0194160 0000000000000000
[  541.031152] Call Trace:
[  541.031153]  <IRQ>  [<ffffffff8148a9f0>] ? dump_stack+0xd/0x17
[  541.031180]  [<ffffffff813c98c1>] ? __dev_set_promiscuity+0x101/0x180
[  541.031183]  [<ffffffff813d3540>] ? __hw_addr_create_ex+0x60/0xc0
[  541.031185]  [<ffffffff813cfe1a>] ? __dev_set_rx_mode+0xaa/0xc0
[  541.031189]  [<ffffffff813d3a81>] ? __dev_mc_add+0x61/0x90
[  541.031198]  [<ffffffffa01dcf9c>] ? igmp6_group_added+0xfc/0x1a0 [ipv6]
[  541.031208]  [<ffffffff8111237b>] ? kmem_cache_alloc+0xcb/0xd0
[  541.031212]  [<ffffffffa01ddcd7>] ? ipv6_dev_mc_inc+0x267/0x300 [ipv6]
[  541.031216]  [<ffffffffa01c2fae>] ? addrconf_join_solict+0x2e/0x40 [ipv6]
[  541.031219]  [<ffffffffa01ba2e9>] ? ipv6_dev_ac_inc+0x159/0x1f0 [ipv6]
[  541.031223]  [<ffffffffa01c0772>] ? addrconf_join_anycast+0x92/0xa0 [ipv6]
[  541.031226]  [<ffffffffa01c311e>] ? __ipv6_ifa_notify+0x11e/0x1e0 [ipv6]
[  541.031229]  [<ffffffffa01c3213>] ? ipv6_ifa_notify+0x33/0x50 [ipv6]
[  541.031233]  [<ffffffffa01c36c8>] ? addrconf_dad_completed+0x28/0x100 [ipv6]
[  541.031241]  [<ffffffff81075c1d>] ? task_cputime+0x2d/0x50
[  541.031244]  [<ffffffffa01c38d6>] ? addrconf_dad_timer+0x136/0x150 [ipv6]
[  541.031247]  [<ffffffffa01c37a0>] ? addrconf_dad_completed+0x100/0x100 [ipv6]
[  541.031255]  [<ffffffff8105313a>] ? call_timer_fn.isra.22+0x2a/0x90
[  541.031258]  [<ffffffffa01c37a0>] ? addrconf_dad_completed+0x100/0x100 [ipv6]

Hunks and backtrace stolen from a patch by Stephen Hemminger.

Reported-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Cc: <stable@vger.kernel.org> 
Cc: <stable@vger.kernel.org> 
[Mike Manning <mmanning@brocade.com>: resolved minor conflicts in addrconf.c]
Signed-off-by: Mike Manning <mmanning@brocade.com>
Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 include/net/if_inet6.h |   4 +-
 net/ipv6/addrconf.c    | 186 ++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 141 insertions(+), 49 deletions(-)

diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h
index 3b558c6..a49b650 100644
--- a/include/net/if_inet6.h
+++ b/include/net/if_inet6.h
@@ -31,8 +31,10 @@
 #define IF_PREFIX_AUTOCONF	0x02
 
 enum {
+	INET6_IFADDR_STATE_PREDAD,
 	INET6_IFADDR_STATE_DAD,
 	INET6_IFADDR_STATE_POSTDAD,
+	INET6_IFADDR_STATE_ERRDAD,
 	INET6_IFADDR_STATE_UP,
 	INET6_IFADDR_STATE_DEAD,
 };
@@ -58,7 +60,7 @@ struct inet6_ifaddr {
 	unsigned long		cstamp;	/* created timestamp */
 	unsigned long		tstamp; /* updated timestamp */
 
-	struct timer_list	dad_timer;
+	struct delayed_work	dad_work;
 
 	struct inet6_dev	*idev;
 	struct rt6_info		*rt;
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 4ff6a9c..98dd353 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -139,10 +139,12 @@ static int ipv6_count_addresses(struct inet6_dev *idev);
 static struct hlist_head inet6_addr_lst[IN6_ADDR_HSIZE];
 static DEFINE_SPINLOCK(addrconf_hash_lock);
 
-static void addrconf_verify(unsigned long);
+static void addrconf_verify(void);
+static void addrconf_verify_rtnl(void);
+static void addrconf_verify_work(struct work_struct *);
 
-static DEFINE_TIMER(addr_chk_timer, addrconf_verify, 0, 0);
-static DEFINE_SPINLOCK(addrconf_verify_lock);
+static struct workqueue_struct *addrconf_wq;
+static DECLARE_DELAYED_WORK(addr_chk_work, addrconf_verify_work);
 
 static void addrconf_join_anycast(struct inet6_ifaddr *ifp);
 static void addrconf_leave_anycast(struct inet6_ifaddr *ifp);
@@ -157,7 +159,7 @@ static struct rt6_info *addrconf_get_prefix_route(const struct in6_addr *pfx,
 						  u32 flags, u32 noflags);
 
 static void addrconf_dad_start(struct inet6_ifaddr *ifp);
-static void addrconf_dad_timer(unsigned long data);
+static void addrconf_dad_work(struct work_struct *w);
 static void addrconf_dad_completed(struct inet6_ifaddr *ifp);
 static void addrconf_dad_run(struct inet6_dev *idev);
 static void addrconf_rs_timer(unsigned long data);
@@ -259,9 +261,9 @@ static void addrconf_del_rs_timer(struct inet6_dev *idev)
 		__in6_dev_put(idev);
 }
 
-static void addrconf_del_dad_timer(struct inet6_ifaddr *ifp)
+static void addrconf_del_dad_work(struct inet6_ifaddr *ifp)
 {
-	if (del_timer(&ifp->dad_timer))
+	if (cancel_delayed_work(&ifp->dad_work))
 		__in6_ifa_put(ifp);
 }
 
@@ -273,12 +275,12 @@ static void addrconf_mod_rs_timer(struct inet6_dev *idev,
 	mod_timer(&idev->rs_timer, jiffies + when);
 }
 
-static void addrconf_mod_dad_timer(struct inet6_ifaddr *ifp,
-				   unsigned long when)
+static void addrconf_mod_dad_work(struct inet6_ifaddr *ifp,
+				   unsigned long delay)
 {
-	if (!timer_pending(&ifp->dad_timer))
+	if (!delayed_work_pending(&ifp->dad_work))
 		in6_ifa_hold(ifp);
-	mod_timer(&ifp->dad_timer, jiffies + when);
+	mod_delayed_work(addrconf_wq, &ifp->dad_work, delay);
 }
 
 static int snmp6_alloc_dev(struct inet6_dev *idev)
@@ -773,8 +775,9 @@ void inet6_ifa_finish_destroy(struct inet6_ifaddr *ifp)
 
 	in6_dev_put(ifp->idev);
 
-	if (del_timer(&ifp->dad_timer))
-		pr_notice("Timer is still running, when freeing ifa=%p\n", ifp);
+	if (cancel_delayed_work(&ifp->dad_work))
+		pr_notice("delayed DAD work was pending while freeing ifa=%p\n",
+			  ifp);
 
 	if (ifp->state != INET6_IFADDR_STATE_DEAD) {
 		pr_warn("Freeing alive inet6 address %p\n", ifp);
@@ -866,8 +869,7 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen,
 
 	spin_lock_init(&ifa->lock);
 	spin_lock_init(&ifa->state_lock);
-	setup_timer(&ifa->dad_timer, addrconf_dad_timer,
-		    (unsigned long)ifa);
+	INIT_DELAYED_WORK(&ifa->dad_work, addrconf_dad_work);
 	INIT_HLIST_NODE(&ifa->addr_lst);
 	ifa->scope = scope;
 	ifa->prefix_len = pfxlen;
@@ -927,6 +929,8 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 	int deleted = 0, onlink = 0;
 	unsigned long expires = jiffies;
 
+	ASSERT_RTNL();
+
 	spin_lock_bh(&ifp->state_lock);
 	state = ifp->state;
 	ifp->state = INET6_IFADDR_STATE_DEAD;
@@ -991,7 +995,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp)
 	}
 	write_unlock_bh(&idev->lock);
 
-	addrconf_del_dad_timer(ifp);
+	addrconf_del_dad_work(ifp);
 
 	ipv6_ifa_notify(RTM_DELADDR, ifp);
 
@@ -1614,7 +1618,7 @@ static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
 {
 	if (ifp->flags&IFA_F_PERMANENT) {
 		spin_lock_bh(&ifp->lock);
-		addrconf_del_dad_timer(ifp);
+		addrconf_del_dad_work(ifp);
 		ifp->flags |= IFA_F_TENTATIVE;
 		if (dad_failed)
 			ifp->flags |= IFA_F_DADFAILED;
@@ -1637,20 +1641,21 @@ static void addrconf_dad_stop(struct inet6_ifaddr *ifp, int dad_failed)
 		}
 		ipv6_del_addr(ifp);
 #endif
-	} else
+	} else {
 		ipv6_del_addr(ifp);
+	}
 }
 
 static int addrconf_dad_end(struct inet6_ifaddr *ifp)
 {
 	int err = -ENOENT;
 
-	spin_lock(&ifp->state_lock);
+	spin_lock_bh(&ifp->state_lock);
 	if (ifp->state == INET6_IFADDR_STATE_DAD) {
 		ifp->state = INET6_IFADDR_STATE_POSTDAD;
 		err = 0;
 	}
-	spin_unlock(&ifp->state_lock);
+	spin_unlock_bh(&ifp->state_lock);
 
 	return err;
 }
@@ -1683,7 +1688,12 @@ void addrconf_dad_failure(struct inet6_ifaddr *ifp)
 		}
 	}
 
-	addrconf_dad_stop(ifp, 1);
+	spin_lock_bh(&ifp->state_lock);
+	/* transition from _POSTDAD to _ERRDAD */
+	ifp->state = INET6_IFADDR_STATE_ERRDAD;
+	spin_unlock_bh(&ifp->state_lock);
+
+	addrconf_mod_dad_work(ifp, 0);
 }
 
 /* Join to solicited addr multicast group. */
@@ -1692,6 +1702,8 @@ void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr)
 {
 	struct in6_addr maddr;
 
+	ASSERT_RTNL();
+
 	if (dev->flags&(IFF_LOOPBACK|IFF_NOARP))
 		return;
 
@@ -1703,6 +1715,8 @@ void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
 {
 	struct in6_addr maddr;
 
+	ASSERT_RTNL();
+
 	if (idev->dev->flags&(IFF_LOOPBACK|IFF_NOARP))
 		return;
 
@@ -1713,6 +1727,9 @@ void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr)
 static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
 {
 	struct in6_addr addr;
+
+	ASSERT_RTNL();
+
 	if (ifp->prefix_len == 127) /* RFC 6164 */
 		return;
 	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
@@ -1724,6 +1741,9 @@ static void addrconf_join_anycast(struct inet6_ifaddr *ifp)
 static void addrconf_leave_anycast(struct inet6_ifaddr *ifp)
 {
 	struct in6_addr addr;
+
+	ASSERT_RTNL();
+
 	if (ifp->prefix_len == 127) /* RFC 6164 */
 		return;
 	ipv6_addr_prefix(&addr, &ifp->addr, ifp->prefix_len);
@@ -2358,7 +2378,7 @@ ok:
 			}
 #endif
 			in6_ifa_put(ifp);
-			addrconf_verify(0);
+			addrconf_verify();
 		}
 	}
 	inet6_prefix_notify(RTM_NEWPREFIX, in6_dev, pinfo);
@@ -2501,7 +2521,7 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p
 		 */
 		addrconf_dad_start(ifp);
 		in6_ifa_put(ifp);
-		addrconf_verify(0);
+		addrconf_verify_rtnl();
 		return 0;
 	}
 
@@ -3082,7 +3102,7 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 		hlist_for_each_entry_rcu(ifa, h, addr_lst) {
 			if (ifa->idev == idev) {
 				hlist_del_init_rcu(&ifa->addr_lst);
-				addrconf_del_dad_timer(ifa);
+				addrconf_del_dad_work(ifa);
 				goto restart;
 			}
 		}
@@ -3122,7 +3142,7 @@ static int addrconf_ifdown(struct net_device *dev, int how)
 	while (!list_empty(&idev->addr_list)) {
 		ifa = list_first_entry(&idev->addr_list,
 				       struct inet6_ifaddr, if_list);
-		addrconf_del_dad_timer(ifa);
+		addrconf_del_dad_work(ifa);
 
 		list_del(&ifa->if_list);
 
@@ -3217,10 +3237,10 @@ static void addrconf_dad_kick(struct inet6_ifaddr *ifp)
 		rand_num = net_random() % (idev->cnf.rtr_solicit_delay ? : 1);
 
 	ifp->dad_probes = idev->cnf.dad_transmits;
-	addrconf_mod_dad_timer(ifp, rand_num);
+	addrconf_mod_dad_work(ifp, rand_num);
 }
 
-static void addrconf_dad_start(struct inet6_ifaddr *ifp)
+static void addrconf_dad_begin(struct inet6_ifaddr *ifp)
 {
 	struct inet6_dev *idev = ifp->idev;
 	struct net_device *dev = idev->dev;
@@ -3272,25 +3292,68 @@ out:
 	read_unlock_bh(&idev->lock);
 }
 
-static void addrconf_dad_timer(unsigned long data)
+static void addrconf_dad_start(struct inet6_ifaddr *ifp)
+{
+	bool begin_dad = false;
+
+	spin_lock_bh(&ifp->state_lock);
+	if (ifp->state != INET6_IFADDR_STATE_DEAD) {
+		ifp->state = INET6_IFADDR_STATE_PREDAD;
+		begin_dad = true;
+	}
+	spin_unlock_bh(&ifp->state_lock);
+
+	if (begin_dad)
+		addrconf_mod_dad_work(ifp, 0);
+}
+
+static void addrconf_dad_work(struct work_struct *w)
 {
-	struct inet6_ifaddr *ifp = (struct inet6_ifaddr *) data;
+	struct inet6_ifaddr *ifp = container_of(to_delayed_work(w),
+						struct inet6_ifaddr,
+						dad_work);
 	struct inet6_dev *idev = ifp->idev;
 	struct in6_addr mcaddr;
 
+	enum {
+		DAD_PROCESS,
+		DAD_BEGIN,
+		DAD_ABORT,
+	} action = DAD_PROCESS;
+
+	rtnl_lock();
+
+	spin_lock_bh(&ifp->state_lock);
+	if (ifp->state == INET6_IFADDR_STATE_PREDAD) {
+		action = DAD_BEGIN;
+		ifp->state = INET6_IFADDR_STATE_DAD;
+	} else if (ifp->state == INET6_IFADDR_STATE_ERRDAD) {
+		action = DAD_ABORT;
+		ifp->state = INET6_IFADDR_STATE_POSTDAD;
+	}
+	spin_unlock_bh(&ifp->state_lock);
+
+	if (action == DAD_BEGIN) {
+		addrconf_dad_begin(ifp);
+		goto out;
+	} else if (action == DAD_ABORT) {
+		addrconf_dad_stop(ifp, 1);
+		goto out;
+	}
+
 	if (!ifp->dad_probes && addrconf_dad_end(ifp))
 		goto out;
 
-	write_lock(&idev->lock);
+	write_lock_bh(&idev->lock);
 	if (idev->dead || !(idev->if_flags & IF_READY)) {
-		write_unlock(&idev->lock);
+		write_unlock_bh(&idev->lock);
 		goto out;
 	}
 
 	spin_lock(&ifp->lock);
 	if (ifp->state == INET6_IFADDR_STATE_DEAD) {
 		spin_unlock(&ifp->lock);
-		write_unlock(&idev->lock);
+		write_unlock_bh(&idev->lock);
 		goto out;
 	}
 
@@ -3301,7 +3364,7 @@ static void addrconf_dad_timer(unsigned long data)
 
 		ifp->flags &= ~(IFA_F_TENTATIVE|IFA_F_OPTIMISTIC|IFA_F_DADFAILED);
 		spin_unlock(&ifp->lock);
-		write_unlock(&idev->lock);
+		write_unlock_bh(&idev->lock);
 
 		addrconf_dad_completed(ifp);
 
@@ -3309,15 +3372,16 @@ static void addrconf_dad_timer(unsigned long data)
 	}
 
 	ifp->dad_probes--;
-	addrconf_mod_dad_timer(ifp, ifp->idev->nd_parms->retrans_time);
+	addrconf_mod_dad_work(ifp, ifp->idev->nd_parms->retrans_time);
 	spin_unlock(&ifp->lock);
-	write_unlock(&idev->lock);
+	write_unlock_bh(&idev->lock);
 
 	/* send a neighbour solicitation for our addr */
 	addrconf_addr_solict_mult(&ifp->addr, &mcaddr);
 	ndisc_send_ns(ifp->idev->dev, NULL, &ifp->addr, &mcaddr, &in6addr_any);
 out:
 	in6_ifa_put(ifp);
+	rtnl_unlock();
 }
 
 static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
@@ -3325,7 +3389,7 @@ static void addrconf_dad_completed(struct inet6_ifaddr *ifp)
 	struct net_device *dev = ifp->idev->dev;
 	struct in6_addr lladdr;
 
-	addrconf_del_dad_timer(ifp);
+	addrconf_del_dad_work(ifp);
 
 	/*
 	 *	Configure the address for reception. Now it is valid.
@@ -3557,23 +3621,23 @@ int ipv6_chk_home_addr(struct net *net, const struct in6_addr *addr)
  *	Periodic address status verification
  */
 
-static void addrconf_verify(unsigned long foo)
+static void addrconf_verify_rtnl(void)
 {
 	unsigned long now, next, next_sec, next_sched;
 	struct inet6_ifaddr *ifp;
 	int i;
 
+	ASSERT_RTNL();
+
 	rcu_read_lock_bh();
-	spin_lock(&addrconf_verify_lock);
 	now = jiffies;
 	next = round_jiffies_up(now + ADDR_CHECK_FREQUENCY);
 
-	del_timer(&addr_chk_timer);
+	cancel_delayed_work(&addr_chk_work);
 
 	for (i = 0; i < IN6_ADDR_HSIZE; i++) {
 restart:
-		hlist_for_each_entry_rcu_bh(ifp,
-					 &inet6_addr_lst[i], addr_lst) {
+		hlist_for_each_entry_rcu_bh(ifp, &inet6_addr_lst[i], addr_lst) {
 			unsigned long age;
 
 			if (ifp->flags & IFA_F_PERMANENT)
@@ -3664,13 +3728,22 @@ restart:
 
 	ADBG((KERN_DEBUG "now = %lu, schedule = %lu, rounded schedule = %lu => %lu\n",
 	      now, next, next_sec, next_sched));
-
-	addr_chk_timer.expires = next_sched;
-	add_timer(&addr_chk_timer);
-	spin_unlock(&addrconf_verify_lock);
+	mod_delayed_work(addrconf_wq, &addr_chk_work, next_sched - now);
 	rcu_read_unlock_bh();
 }
 
+static void addrconf_verify_work(struct work_struct *w)
+{
+	rtnl_lock();
+	addrconf_verify_rtnl();
+	rtnl_unlock();
+}
+
+static void addrconf_verify(void)
+{
+	mod_delayed_work(addrconf_wq, &addr_chk_work, 0);
+}
+
 static struct in6_addr *extract_addr(struct nlattr *addr, struct nlattr *local)
 {
 	struct in6_addr *pfx = NULL;
@@ -3722,6 +3795,8 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
 	clock_t expires;
 	unsigned long timeout;
 
+	ASSERT_RTNL();
+
 	if (!valid_lft || (prefered_lft > valid_lft))
 		return -EINVAL;
 
@@ -3755,7 +3830,7 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags,
 
 	addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev,
 			      expires, flags);
-	addrconf_verify(0);
+	addrconf_verify_rtnl();
 
 	return 0;
 }
@@ -4364,6 +4439,8 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token)
 	bool update_rs = false;
 	struct in6_addr ll_addr;
 
+	ASSERT_RTNL();
+
 	if (token == NULL)
 		return -EINVAL;
 	if (ipv6_addr_any(token))
@@ -4409,6 +4486,7 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token)
 	}
 
 	write_unlock_bh(&idev->lock);
+	addrconf_verify_rtnl();
 	return 0;
 }
 
@@ -4610,6 +4688,9 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
 {
 	struct net *net = dev_net(ifp->idev->dev);
 
+	if (event)
+		ASSERT_RTNL();
+
 	inet6_ifa_notify(event ? : RTM_NEWADDR, ifp);
 
 	switch (event) {
@@ -5138,6 +5219,12 @@ int __init addrconf_init(void)
 	if (err < 0)
 		goto out_addrlabel;
 
+	addrconf_wq = create_workqueue("ipv6_addrconf");
+	if (!addrconf_wq) {
+		err = -ENOMEM;
+		goto out_nowq;
+	}
+
 	/* The addrconf netdev notifier requires that loopback_dev
 	 * has it's ipv6 private information allocated and setup
 	 * before it can bring up and give link-local addresses
@@ -5168,7 +5255,7 @@ int __init addrconf_init(void)
 
 	register_netdevice_notifier(&ipv6_dev_notf);
 
-	addrconf_verify(0);
+	addrconf_verify();
 
 	err = rtnl_af_register(&inet6_ops);
 	if (err < 0)
@@ -5199,6 +5286,8 @@ errout:
 errout_af:
 	unregister_netdevice_notifier(&ipv6_dev_notf);
 errlo:
+	destroy_workqueue(addrconf_wq);
+out_nowq:
 	unregister_pernet_subsys(&addrconf_ops);
 out_addrlabel:
 	ipv6_addr_label_cleanup();
@@ -5234,7 +5323,8 @@ void addrconf_cleanup(void)
 	for (i = 0; i < IN6_ADDR_HSIZE; i++)
 		WARN_ON(!hlist_empty(&inet6_addr_lst[i]));
 	spin_unlock_bh(&addrconf_hash_lock);
-
-	del_timer(&addr_chk_timer);
+	cancel_delayed_work(&addr_chk_work);
 	rtnl_unlock();
+
+	destroy_workqueue(addrconf_wq);
 }
-- 
2.8.0.rc2.1.gbe9624a

  parent reply	other threads:[~2017-02-05 20:08 UTC|newest]

Thread overview: 239+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-05 19:18 [PATCH 3.10 100/319] fix fault_in_multipages_...() on architectures with no-op access_ok() Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 101/319] fix memory leaks in tracing_buffers_splice_read() Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 102/319] arc: don't leak bits of kernel stack into coredump Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 103/319] Fix potential infoleak in older kernels Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 104/319] swapfile: fix memory corruption via malformed swapfile Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 105/319] coredump: fix unfreezable coredumping task Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 106/319] usb: dwc3: gadget: increment request->actual once Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 107/319] USB: validate wMaxPacketValue entries in endpoint descriptors Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 108/319] USB: fix typo in wMaxPacketSize validation Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 109/319] usb: xhci: Fix panic if disconnect Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 110/319] USB: serial: fix memleak in driver-registration error path Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 111/319] USB: kobil_sct: fix non-atomic allocation in write path Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 112/319] USB: serial: mos7720: " Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 113/319] USB: serial: mos7840: " Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 114/319] usb: renesas_usbhs: fix clearing the {BRDY,BEMP}STS condition Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 115/319] USB: change bInterval default to 10 ms Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 116/319] usb: gadget: fsl_qe_udc: signedness bug in qe_get_frame() Willy Tarreau
2017-02-05 19:18 ` [PATCH 3.10 117/319] USB: serial: cp210x: fix hardware flow-control disable Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 118/319] usb: misc: legousbtower: Fix NULL pointer deference Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 119/319] usb: gadget: function: u_ether: don't starve tx request queue Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 120/319] USB: serial: cp210x: fix tiocmget error handling Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 121/319] usb: gadget: u_ether: remove interrupt throttling Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 122/319] usb: chipidea: move the lock initialization to core file Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 123/319] Fix USB CB/CBI storage devices with CONFIG_VMAP_STACK=y Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 124/319] ALSA: rawmidi: Fix possible deadlock with virmidi registration Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 125/319] ALSA: timer: fix NULL pointer dereference in read()/ioctl() race Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 126/319] ALSA: timer: fix division by zero after SNDRV_TIMER_IOCTL_CONTINUE Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 127/319] ALSA: timer: fix NULL pointer dereference on memory allocation failure Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 128/319] ALSA: ali5451: Fix out-of-bound position reporting Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 129/319] ALSA: pcm : Call kill_fasync() in stream lock Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 130/319] zfcp: fix fc_host port_type with NPIV Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 131/319] zfcp: fix ELS/GS request&response length for hardware data router Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 132/319] zfcp: close window with unblocked rport during rport gone Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 133/319] zfcp: retain trace level for SCSI and HBA FSF response records Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 134/319] zfcp: restore: Dont use 0 to indicate invalid LUN in rec trace Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 135/319] zfcp: trace on request for open and close of WKA port Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 136/319] zfcp: restore tracing of handle for port and LUN with HBA records Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 137/319] zfcp: fix D_ID field with actual value on tracing SAN responses Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 138/319] zfcp: fix payload trace length for SAN request&response Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 139/319] zfcp: trace full payload of all SAN records (req,resp,iels) Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 140/319] scsi: zfcp: spin_lock_irqsave() is not nestable Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 141/319] scsi: mpt3sas: Fix secure erase premature termination Willy Tarreau
2017-02-06 16:21   ` Sathya Prakash Veerichetty
2017-02-06 22:26     ` Willy Tarreau
2017-02-07  6:38       ` James Bottomley
2017-02-07  6:59         ` Willy Tarreau
2017-02-07 17:02           ` James Bottomley
2017-02-07 17:12             ` Willy Tarreau
2017-02-08  6:53               ` Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 142/319] mpt2sas: " Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 143/319] scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough) devices Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 144/319] scsi: megaraid_sas: fix macro MEGASAS_IS_LOGICAL to avoid regression Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 145/319] scsi: ibmvfc: Fix I/O hang when port is not mapped Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 146/319] scsi: Fix use-after-free Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 147/319] scsi: arcmsr: Buffer overflow in arcmsr_iop_message_xfer() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 148/319] scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 149/319] scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 150/319] ext4: validate that metadata blocks do not overlap superblock Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 151/319] ext4: avoid modifying checksum fields directly during checksum verification Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 152/319] ext4: use __GFP_NOFAIL in ext4_free_blocks() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 153/319] ext4: reinforce check of i_dtime when clearing high fields of uid and gid Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 154/319] ext4: allow DAX writeback for hole punch Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 155/319] ext4: sanity check the block and cluster size at mount time Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 156/319] reiserfs: fix "new_insert_key may be used uninitialized ..." Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 157/319] reiserfs: Unlock superblock before calling reiserfs_quota_on_mount() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 158/319] xfs: fix superblock inprogress check Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 159/319] libxfs: clean up _calc_dquots_per_chunk Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 160/319] btrfs: ensure that file descriptor used with subvol ioctls is a dir Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 161/319] ocfs2/dlm: fix race between convert and migration Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 162/319] ocfs2: fix start offset to ocfs2_zero_range_for_truncate() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 163/319] ubifs: Fix assertion in layout_in_gaps() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 164/319] ubifs: Fix xattr_names length in exit paths Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 165/319] UBIFS: Fix possible memory leak in ubifs_readdir() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 166/319] ubifs: Abort readdir upon error Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 167/319] ubifs: Fix regression in ubifs_readdir() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 168/319] UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 169/319] NFSv4.x: Fix a refcount leak in nfs_callback_up_net Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 170/319] NFSD: Using free_conn free connection Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 171/319] NFS: Don't drop CB requests with invalid principals Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 172/319] NFSv4: Open state recovery must account for file permission changes Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 173/319] fs/seq_file: fix out-of-bounds read Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 174/319] fs/super.c: fix race between freeze_super() and thaw_super() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 175/319] isofs: Do not return EACCES for unknown filesystems Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 176/319] hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common() Willy Tarreau
2017-02-05 19:19 ` [PATCH 3.10 177/319] driver core: Delete an unnecessary check before the function call "put_device" Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 178/319] driver core: fix race between creating/querying glue dir and its cleanup Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 179/319] drm/radeon: fix radeon_move_blit on 32bit systems Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 180/319] drm: Reject page_flip for !DRIVER_MODESET Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 181/319] drm/radeon: Ensure vblank interrupt is enabled on DPMS transition to on Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 182/319] qxl: check for kmap failures Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 183/319] Input: i8042 - break load dependency between atkbd/psmouse and i8042 Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 184/319] Input: i8042 - set up shared ps2_cmd_mutex for AUX ports Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 185/319] Input: ili210x - fix permissions on "calibrate" attribute Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 186/319] hwrng: exynos - Disable runtime PM on probe failure Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 187/319] hwrng: omap - Fix assumption that runtime_get_sync will always succeed Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 188/319] hwrng: omap - Only fail if pm_runtime_get_sync returns < 0 Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 189/319] i2c-eg20t: fix race between i2c init and interrupt enable Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 190/319] em28xx-i2c: rt_mutex_trylock() returns zero on failure Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 191/319] i2c: core: fix NULL pointer dereference under race condition Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 192/319] i2c: at91: fix write transfers by clearing pending interrupt first Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 193/319] iio: accel: kxsd9: Fix raw read return Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 194/319] iio: accel: kxsd9: Fix scaling bug Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 195/319] thermal: hwmon: Properly report critical temperature in sysfs Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 196/319] cdc-acm: fix wrong pipe type on rx interrupt xfers Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 197/319] timers: Use proper base migration in add_timer_on() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 198/319] EDAC: Increment correct counter in edac_inc_ue_error() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 199/319] IB/srpt: Simplify srpt_handle_tsk_mgmt() Willy Tarreau
2017-02-06  5:14   ` Bart Van Assche
2017-02-06  6:32     ` Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 200/319] IB/ipoib: Fix memory corruption in ipoib cm mode connect flow Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 201/319] IB/core: Fix use after free in send_leave function Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 202/319] IB/ipoib: Don't allow MC joins during light MC flush Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 203/319] IB/mlx4: Fix incorrect MC join state bit-masking on SR-IOV Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 204/319] IB/mlx4: Fix create CQ error flow Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 205/319] IB/uverbs: Fix leak of XRC target QPs Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 206/319] IB/cm: Mark stale CM id's whenever the mad agent was unregistered Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 207/319] mtd: blkdevs: fix potential deadlock + lockdep warnings Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 208/319] mtd: pmcmsp-flash: Allocating too much in init_msp_flash() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 209/319] mtd: nand: davinci: Reinitialize the HW ECC engine in 4bit hwctl Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 210/319] perf symbols: Fixup symbol sizes before picking best ones Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 211/319] perf: Tighten (and fix) the grouping condition Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 212/319] tty: Prevent ldisc drivers from re-using stale tty fields Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 213/319] tty: limit terminal size to 4M chars Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 214/319] tty: vt, fix bogus division in csi_J Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 215/319] vt: clear selection before resizing Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 216/319] drivers/vfio: Rework offsetofend() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 217/319] include/stddef.h: Move offsetofend() from vfio.h to a generic kernel header Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 218/319] stddef.h: move offsetofend inside #ifndef/#endif guard, neaten Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 219/319] ipv6: don't call fib6_run_gc() until routing is ready Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 220/319] ipv6: split duplicate address detection and router solicitation timer Willy Tarreau
2017-02-05 19:20 ` Willy Tarreau [this message]
2017-02-05 19:20 ` [PATCH 3.10 222/319] ipv6: addrconf: fix dev refcont leak when DAD failed Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 223/319] ipv6: fix rtnl locking in setsockopt for anycast and multicast Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 224/319] ip6_gre: fix flowi6_proto value in ip6gre_xmit_other() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 225/319] ipv6: correctly add local routes when lo goes up Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 226/319] ipv6: dccp: fix out of bound access in dccp_v6_err() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 227/319] ipv6: dccp: add missing bind_conflict to dccp_ipv6_mapped Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 228/319] ip6_tunnel: Clear IP6CB in ip6tunnel_xmit() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 229/319] ip6_tunnel: disable caching when the traffic class is inherited Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 230/319] net/irda: handle iriap_register_lsap() allocation failure Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 231/319] tcp: fix use after free in tcp_xmit_retransmit_queue() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 232/319] tcp: properly scale window in tcp_v[46]_reqsk_send_ack() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 233/319] tcp: fix overflow in __tcp_retransmit_skb() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 234/319] tcp: fix wrong checksum calculation on MTU probing Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 235/319] tcp: take care of truncations done by sk_filter() Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 236/319] bonding: Fix bonding crash Willy Tarreau
2017-02-05 19:20 ` [PATCH 3.10 237/319] net: ratelimit warnings about dst entry refcount underflow or overflow Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 238/319] mISDN: Support DR6 indication in mISDNipac driver Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 239/319] mISDN: Fixing missing validation in base_sock_bind() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 240/319] net: disable fragment reassembly if high_thresh is set to zero Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 241/319] ipvs: count pre-established TCP states as active Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 242/319] iwlwifi: pcie: fix access to scratch buffer Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 243/319] svc: Avoid garbage replies when pc_func() returns rpc_drop_reply Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 244/319] brcmsmac: Free packet if dma_mapping_error() fails in dma_rxfill Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 245/319] brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 246/319] brcmfmac: avoid potential stack overflow in brcmf_cfg80211_start_ap() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 247/319] pstore: Fix buffer overflow while write offset equal to buffer size Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 248/319] net/mlx4_core: Allow resetting VF admin mac to zero Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 249/319] firewire: net: guard against rx buffer overflows Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 250/319] firewire: net: fix fragmented datagram_size off-by-one Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 251/319] netfilter: fix namespace handling in nf_log_proc_dostring Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 252/319] can: bcm: fix warning in bcm_connect/proc_register Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 253/319] net: fix sk_mem_reclaim_partial() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 254/319] net: avoid sk_forward_alloc overflows Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 255/319] ipmr, ip6mr: fix scheduling while atomic and a deadlock with ipmr_get_route Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 256/319] packet: call fanout_release, while UNREGISTERING a netdev Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 257/319] net: sctp, forbid negative length Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 258/319] sctp: validate chunk len before actually using it Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 259/319] net: clear sk_err_soft in sk_clone_lock() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 260/319] net: mangle zero checksum in skb_checksum_help() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 261/319] dccp: do not send reset to already closed sockets Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 262/319] dccp: fix out of bound access in dccp_v4_err() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 263/319] sctp: assign assoc_id earlier in __sctp_connect Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 264/319] neigh: check error pointer instead of NULL for ipv4_neigh_lookup() Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 265/319] ipv4: use new_gw for redirect neigh lookup Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 266/319] mac80211: fix purging multicast PS buffer queue Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 267/319] mac80211: discard multicast and 4-addr A-MSDUs Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 268/319] cfg80211: limit scan results cache size Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 269/319] mwifiex: printk() overflow with 32-byte SSIDs Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 270/319] ipv4: Set skb->protocol properly for local output Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 271/319] net: sky2: Fix shutdown crash Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 272/319] kaweth: fix firmware download Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 273/319] tracing: Move mutex to protect against resetting of seq data Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 274/319] kernel/fork: fix CLONE_CHILD_CLEARTID regression in nscd Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 275/319] ipc: remove use of seq_printf return value Willy Tarreau
2017-02-05 19:49   ` Joe Perches
2017-02-05 20:35     ` Willy Tarreau
2017-02-06  8:06   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 276/319] arch: Introduce smp_load_acquire(), smp_store_release() Willy Tarreau
2017-02-06  8:06   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 277/319] kernel: Provide READ_ONCE and ASSIGN_ONCE Willy Tarreau
2017-02-06  8:06   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 278/319] kernel: Change ASSIGN_ONCE(val, x) to WRITE_ONCE(x, val) Willy Tarreau
2017-02-06  8:06   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 279/319] kernel: make READ_ONCE() valid on const arguments Willy Tarreau
2017-02-06  8:05   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 280/319] locking: Remove atomicy checks from {READ,WRITE}_ONCE Willy Tarreau
2017-02-06  8:05   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 281/319] compiler: Allow 1- and 2-byte smp_load_acquire() and smp_store_release() Willy Tarreau
2017-02-06  8:05   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 282/319] ipc/sem.c: fix complex_count vs. simple op race Willy Tarreau
2017-02-06  8:04   ` Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 283/319] cfq: fix starvation of asynchronous writes Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 284/319] drbd: Fix kernel_sendmsg() usage - potential NULL deref Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 285/319] lib/genalloc.c: start search from start of chunk Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 286/319] tools/vm/slabinfo: fix an unintentional printf Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 287/319] rcu: Fix soft lockup for rcu_nocb_kthread Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 288/319] ratelimit: fix bug in time interval by resetting right begin time Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 289/319] mfd: core: Fix device reference leak in mfd_clone_cell Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 290/319] PM / sleep: fix device reference leak in test_suspend Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 291/319] mmc: mxs: Initialize the spinlock prior to using it Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 292/319] mmc: block: don't use CMD23 with very old MMC cards Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 293/319] pstore/core: drop cmpxchg based updates Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 294/319] pstore/ram: Use memcpy_toio instead of memcpy Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 295/319] pstore/ram: Use memcpy_fromio() to save old buffer Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 296/319] mb86a20s: fix the locking logic Willy Tarreau
2017-02-05 19:21 ` [PATCH 3.10 297/319] mb86a20s: fix demod settings Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 298/319] cx231xx: don't return error on success Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 299/319] cx231xx: fix GPIOs for Pixelview SBTVD hybrid Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 300/319] gpio: mpc8xxx: Correct irq handler function Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 301/319] uio: fix dmem_region_start computation Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 302/319] KEYS: Fix short sprintf buffer in /proc/keys show function Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 303/319] hv: do not lose pending heartbeat vmbus packets Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 304/319] staging: iio: ad5933: avoid uninitialized variable in error case Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 305/319] mei: bus: fix received data size check in NFC fixup Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 306/319] ACPI / APEI: Fix incorrect return value of ghes_proc() Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 307/319] PCI: Handle read-only BARs on AMD CS553x devices Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 308/319] tile: avoid using clocksource_cyc2ns with absolute cycle count Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 309/319] dm flakey: fix reads to be issued if drop_writes configured Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 310/319] mm,ksm: fix endless looping in allocating memory when ksm enable Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 311/319] can: dev: fix deadlock reported after bus-off Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 312/319] hwmon: (adt7411) set bit 3 in CFG1 register Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 313/319] mpi: Fix NULL ptr dereference in mpi_powm() [ver #3] Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 314/319] mfd: 88pm80x: Double shifting bug in suspend/resume Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 315/319] ASoC: omap-mcpdm: Fix irq resource handling Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 316/319] regulator: tps65910: Work around silicon erratum SWCZ010 Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 317/319] dm: mark request_queue dead before destroying the DM device Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 318/319] fbdev/efifb: Fix 16 color palette entry calculation Willy Tarreau
2017-02-05 19:22 ` [PATCH 3.10 319/319] metag: Only define atomic_dec_if_positive conditionally Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1486322541-8206-122-git-send-email-w@1wt.eu \
    --to=w@1wt.eu \
    --cc=davem@davemloft.net \
    --cc=hannes@stressinduktion.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mmanning@brocade.com \
    --cc=stable@vger.kernel.org \
    --cc=stephen@networkplumber.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®