aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/netconsole.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-05-23 11:39:24 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2011-05-23 11:39:24 -0400
commit53ee7569ce8beb3fd3fc0817116c29298d72353f (patch)
treef3dcce10508c2126347e40b468fd6d3c3cc7006a /drivers/net/netconsole.c
parent4d9dec4db2efbd7edb549bd02373995b67496983 (diff)
parent1b6e2ceb4745b5838cb94463131d19dbea6cf0e3 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (27 commits) bnx2x: allow device properly initialize after hotplug bnx2x: fix DMAE timeout according to hw specifications bnx2x: properly handle CFC DEL in cnic flow bnx2x: call dev_kfree_skb_any instead of dev_kfree_skb net: filter: move forward declarations to avoid compile warnings pktgen: refactor pg_init() code pktgen: use vzalloc_node() instead of vmalloc_node() + memset() net: skb_trim explicitely check the linearity instead of data_len ipv4: Give backtrace in ip_rt_bug(). net: avoid synchronize_rcu() in dev_deactivate_many net: remove synchronize_net() from netdev_set_master() rtnetlink: ignore NETDEV_RELEASE and NETDEV_JOIN event net: rename NETDEV_BONDING_DESLAVE to NETDEV_RELEASE bridge: call NETDEV_JOIN notifiers when add a slave netpoll: disable netpoll when enslave a device macvlan: Forward unicast frames in bridge mode to lowerdev net: Remove linux/prefetch.h include from linux/skbuff.h ipv4: Include linux/prefetch.h in fib_trie.c netlabel: Remove prefetches from list handlers. drivers/net: add prefetch header for prefetch users ... Fixed up prefetch parts: removed a few duplicate prefetch.h includes, fixed the location of the igb prefetch.h, took my version of the skbuff.h code without the extra parentheses etc.
Diffstat (limited to 'drivers/net/netconsole.c')
-rw-r--r--drivers/net/netconsole.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index a83e101440fd..dfc82720065a 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -621,11 +621,10 @@ static int netconsole_netdev_event(struct notifier_block *this,
621 bool stopped = false; 621 bool stopped = false;
622 622
623 if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER || 623 if (!(event == NETDEV_CHANGENAME || event == NETDEV_UNREGISTER ||
624 event == NETDEV_BONDING_DESLAVE || event == NETDEV_GOING_DOWN)) 624 event == NETDEV_RELEASE || event == NETDEV_JOIN))
625 goto done; 625 goto done;
626 626
627 spin_lock_irqsave(&target_list_lock, flags); 627 spin_lock_irqsave(&target_list_lock, flags);
628restart:
629 list_for_each_entry(nt, &target_list, list) { 628 list_for_each_entry(nt, &target_list, list) {
630 netconsole_target_get(nt); 629 netconsole_target_get(nt);
631 if (nt->np.dev == dev) { 630 if (nt->np.dev == dev) {
@@ -633,6 +632,8 @@ restart:
633 case NETDEV_CHANGENAME: 632 case NETDEV_CHANGENAME:
634 strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ); 633 strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
635 break; 634 break;
635 case NETDEV_RELEASE:
636 case NETDEV_JOIN:
636 case NETDEV_UNREGISTER: 637 case NETDEV_UNREGISTER:
637 /* 638 /*
638 * rtnl_lock already held 639 * rtnl_lock already held
@@ -647,11 +648,7 @@ restart:
647 dev_put(nt->np.dev); 648 dev_put(nt->np.dev);
648 nt->np.dev = NULL; 649 nt->np.dev = NULL;
649 netconsole_target_put(nt); 650 netconsole_target_put(nt);
650 goto restart;
651 } 651 }
652 /* Fall through */
653 case NETDEV_GOING_DOWN:
654 case NETDEV_BONDING_DESLAVE:
655 nt->enabled = 0; 652 nt->enabled = 0;
656 stopped = true; 653 stopped = true;
657 break; 654 break;
@@ -660,10 +657,21 @@ restart:
660 netconsole_target_put(nt); 657 netconsole_target_put(nt);
661 } 658 }
662 spin_unlock_irqrestore(&target_list_lock, flags); 659 spin_unlock_irqrestore(&target_list_lock, flags);
663 if (stopped && (event == NETDEV_UNREGISTER || event == NETDEV_BONDING_DESLAVE)) 660 if (stopped) {
664 printk(KERN_INFO "netconsole: network logging stopped on " 661 printk(KERN_INFO "netconsole: network logging stopped on "
665 "interface %s as it %s\n", dev->name, 662 "interface %s as it ", dev->name);
666 event == NETDEV_UNREGISTER ? "unregistered" : "released slaves"); 663 switch (event) {
664 case NETDEV_UNREGISTER:
665 printk(KERN_CONT "unregistered\n");
666 break;
667 case NETDEV_RELEASE:
668 printk(KERN_CONT "released slaves\n");
669 break;
670 case NETDEV_JOIN:
671 printk(KERN_CONT "is joining a master device\n");
672 break;
673 }
674 }
667 675
668done: 676done:
669 return NOTIFY_DONE; 677 return NOTIFY_DONE;