diff options
| author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:37:49 +0200 | 
|---|---|---|
| committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-05-02 17:54:19 +0200 | 
| commit | c032862fba51a3ca504752d3a25186b324c5ce83 (patch) | |
| tree | 955dc2ba4ab3df76ecc2bb780ee84aca04967e8d /drivers/net/netconsole.c | |
| parent | fda76e074c7737fc57855dd17c762e50ed526052 (diff) | |
| parent | 8700c95adb033843fc163d112b9d21d4fda78018 (diff) | |
| download | olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.tar.xz olio-linux-3.10-c032862fba51a3ca504752d3a25186b324c5ce83.zip  | |
Merge commit '8700c95adb03' into timers/nohz
The full dynticks tree needs the latest RCU and sched
upstream updates in order to fix some dependencies.
Merge a common upstream merge point that has these
updates.
Conflicts:
	include/linux/perf_event.h
	kernel/rcutree.h
	kernel/rcutree_plugin.h
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Diffstat (limited to 'drivers/net/netconsole.c')
| -rw-r--r-- | drivers/net/netconsole.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 37add21a3d7..59ac143dec2 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -666,6 +666,7 @@ static int netconsole_netdev_event(struct notifier_block *this,  		goto done;  	spin_lock_irqsave(&target_list_lock, flags); +restart:  	list_for_each_entry(nt, &target_list, list) {  		netconsole_target_get(nt);  		if (nt->np.dev == dev) { @@ -678,15 +679,17 @@ static int netconsole_netdev_event(struct notifier_block *this,  			case NETDEV_UNREGISTER:  				/*  				 * rtnl_lock already held +				 * we might sleep in __netpoll_cleanup()  				 */ -				if (nt->np.dev) { -					__netpoll_cleanup(&nt->np); -					dev_put(nt->np.dev); -					nt->np.dev = NULL; -				} +				spin_unlock_irqrestore(&target_list_lock, flags); +				__netpoll_cleanup(&nt->np); +				spin_lock_irqsave(&target_list_lock, flags); +				dev_put(nt->np.dev); +				nt->np.dev = NULL;  				nt->enabled = 0;  				stopped = true; -				break; +				netconsole_target_put(nt); +				goto restart;  			}  		}  		netconsole_target_put(nt);  |