* [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c [not found] <11846606051099-git-send-email-crquan@gmail.com> @ 2007-07-18 2:41 ` Denis Cheng 2007-07-18 2:41 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one Denis Cheng 2007-07-18 9:11 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c David Miller 0 siblings, 2 replies; 18+ messages in thread From: Denis Cheng @ 2007-07-18 2:41 UTC (permalink / raw) To: David S. Miller, Networking Team, Alexey Kuznetsov Cc: Pekka Savola, James Morris, Patrick McHardy, netdev, linux-kernel, Denis Cheng Because this function is only called by unregister_netdevice, this moving could make this non-global function static, and also remove its declaration in netdevice.h; Any further, function __dev_addr_discard is also just called by dev_mc_discard and dev_unicast_discard, keeping this two functions both in one c file could make __dev_addr_discard also static and remove its declaration in netdevice.h; Futhermore, the sequential call to dev_unicast_discard and then dev_mc_discard in unregister_netdevice have a similar mechanism that: (netif_tx_lock_bh / __dev_addr_discard / netif_tx_unlock_bh), they should merged into one to eliminate duplicates in acquiring and releasing the dev->_xmit_lock, this would be done in my following patch. Signed-off-by: Denis Cheng <crquan@gmail.com> --- include/linux/netdevice.h | 2 -- net/core/dev.c | 14 +++++++++++++- net/core/dev_mcast.c | 12 ------------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index da7a13c..9820ca1 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1098,10 +1098,8 @@ extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all extern int dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly); extern int dev_mc_sync(struct net_device *to, struct net_device *from); extern void dev_mc_unsync(struct net_device *to, struct net_device *from); -extern void dev_mc_discard(struct net_device *dev); extern int __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all); extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); -extern void __dev_addr_discard(struct dev_addr_list **list); extern void dev_set_promiscuity(struct net_device *dev, int inc); extern void dev_set_allmulti(struct net_device *dev, int inc); extern void netdev_state_change(struct net_device *dev); diff --git a/net/core/dev.c b/net/core/dev.c index 13a0d9f..3ba63aa 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2715,7 +2715,7 @@ int __dev_addr_add(struct dev_addr_list **list, int *count, return 0; } -void __dev_addr_discard(struct dev_addr_list **list) +static void __dev_addr_discard(struct dev_addr_list **list) { struct dev_addr_list *tmp; @@ -2785,6 +2785,18 @@ static void dev_unicast_discard(struct net_device *dev) netif_tx_unlock_bh(dev); } +/* + * Discard multicast list when a device is downed + */ + +static void dev_mc_discard(struct net_device *dev) +{ + netif_tx_lock_bh(dev); + __dev_addr_discard(&dev->mc_list); + dev->mc_count = 0; + netif_tx_unlock_bh(dev); +} + unsigned dev_get_flags(const struct net_device *dev) { unsigned flags; diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c index 235a2a8..99aece1 100644 --- a/net/core/dev_mcast.c +++ b/net/core/dev_mcast.c @@ -177,18 +177,6 @@ void dev_mc_unsync(struct net_device *to, struct net_device *from) } EXPORT_SYMBOL(dev_mc_unsync); -/* - * Discard multicast list when a device is downed - */ - -void dev_mc_discard(struct net_device *dev) -{ - netif_tx_lock_bh(dev); - __dev_addr_discard(&dev->mc_list); - dev->mc_count = 0; - netif_tx_unlock_bh(dev); -} - #ifdef CONFIG_PROC_FS static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) { -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one 2007-07-18 2:41 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c Denis Cheng @ 2007-07-18 2:41 ` Denis Cheng 2007-07-18 2:41 ` [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability Denis Cheng 2007-07-18 9:12 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one David Miller 2007-07-18 9:11 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c David Miller 1 sibling, 2 replies; 18+ messages in thread From: Denis Cheng @ 2007-07-18 2:41 UTC (permalink / raw) To: David S. Miller, Networking Team, Alexey Kuznetsov Cc: Pekka Savola, James Morris, Patrick McHardy, netdev, linux-kernel, Denis Cheng this two functions could share the dev->_xmit_lock acquired context. Signed-off-by: Denis Cheng <crquan@gmail.com> --- net/core/dev.c | 16 ++++------------ 1 files changed, 4 insertions(+), 12 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 3ba63aa..17c9cbd 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2777,23 +2777,16 @@ int dev_unicast_add(struct net_device *dev, void *addr, int alen) } EXPORT_SYMBOL(dev_unicast_add); -static void dev_unicast_discard(struct net_device *dev) +static void dev_addr_discard(struct net_device *dev) { netif_tx_lock_bh(dev); + __dev_addr_discard(&dev->uc_list); dev->uc_count = 0; - netif_tx_unlock_bh(dev); -} -/* - * Discard multicast list when a device is downed - */ - -static void dev_mc_discard(struct net_device *dev) -{ - netif_tx_lock_bh(dev); __dev_addr_discard(&dev->mc_list); dev->mc_count = 0; + netif_tx_unlock_bh(dev); } @@ -3751,8 +3744,7 @@ void unregister_netdevice(struct net_device *dev) /* * Flush the unicast and multicast chains */ - dev_unicast_discard(dev); - dev_mc_discard(dev); + dev_addr_discard(dev); if (dev->uninit) dev->uninit(dev); -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability 2007-07-18 2:41 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one Denis Cheng @ 2007-07-18 2:41 ` Denis Cheng 2007-07-18 9:13 ` David Miller 2007-07-18 9:12 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one David Miller 1 sibling, 1 reply; 18+ messages in thread From: Denis Cheng @ 2007-07-18 2:41 UTC (permalink / raw) To: David S. Miller, Networking Team, Alexey Kuznetsov Cc: Pekka Savola, James Morris, Patrick McHardy, netdev, linux-kernel, Denis Cheng Signed-off-by: Denis Cheng <crquan@gmail.com> --- net/core/dev.c | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 17c9cbd..6357f54 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2715,20 +2715,6 @@ int __dev_addr_add(struct dev_addr_list **list, int *count, return 0; } -static void __dev_addr_discard(struct dev_addr_list **list) -{ - struct dev_addr_list *tmp; - - while (*list != NULL) { - tmp = *list; - *list = tmp->next; - if (tmp->da_users > tmp->da_gusers) - printk("__dev_addr_discard: address leakage! " - "da_users=%d\n", tmp->da_users); - kfree(tmp); - } -} - /** * dev_unicast_delete - Release secondary unicast address. * @dev: device @@ -2777,6 +2763,20 @@ int dev_unicast_add(struct net_device *dev, void *addr, int alen) } EXPORT_SYMBOL(dev_unicast_add); +static void __dev_addr_discard(struct dev_addr_list **list) +{ + struct dev_addr_list *tmp; + + while (*list != NULL) { + tmp = *list; + *list = tmp->next; + if (tmp->da_users > tmp->da_gusers) + printk("__dev_addr_discard: address leakage! " + "da_users=%d\n", tmp->da_users); + kfree(tmp); + } +} + static void dev_addr_discard(struct net_device *dev) { netif_tx_lock_bh(dev); -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability 2007-07-18 2:41 ` [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability Denis Cheng @ 2007-07-18 9:13 ` David Miller 0 siblings, 0 replies; 18+ messages in thread From: David Miller @ 2007-07-18 9:13 UTC (permalink / raw) To: crquan; +Cc: netdev, kuznet, pekkas, jmorris, kaber, linux-kernel From: Denis Cheng <crquan@gmail.com> Date: Wed, 18 Jul 2007 10:41:05 +0800 > Signed-off-by: Denis Cheng <crquan@gmail.com> Also applied, thank you. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one 2007-07-18 2:41 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one Denis Cheng 2007-07-18 2:41 ` [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability Denis Cheng @ 2007-07-18 9:12 ` David Miller 1 sibling, 0 replies; 18+ messages in thread From: David Miller @ 2007-07-18 9:12 UTC (permalink / raw) To: crquan; +Cc: netdev, kuznet, pekkas, jmorris, kaber, linux-kernel From: Denis Cheng <crquan@gmail.com> Date: Wed, 18 Jul 2007 10:41:04 +0800 > this two functions could share the dev->_xmit_lock acquired context. > > Signed-off-by: Denis Cheng <crquan@gmail.com> Applied, thanks. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 2:41 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c Denis Cheng 2007-07-18 2:41 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one Denis Cheng @ 2007-07-18 9:11 ` David Miller 2007-07-18 9:59 ` rae l 1 sibling, 1 reply; 18+ messages in thread From: David Miller @ 2007-07-18 9:11 UTC (permalink / raw) To: crquan; +Cc: netdev, kuznet, pekkas, jmorris, kaber, linux-kernel From: Denis Cheng <crquan@gmail.com> Date: Wed, 18 Jul 2007 10:41:03 +0800 > Because this function is only called by unregister_netdevice, > this moving could make this non-global function static, > and also remove its declaration in netdevice.h; > > Any further, function __dev_addr_discard is also just called by > dev_mc_discard and dev_unicast_discard, keeping this two functions > both in one c file could make __dev_addr_discard also static > and remove its declaration in netdevice.h; > > Futhermore, the sequential call to dev_unicast_discard and then > dev_mc_discard in unregister_netdevice have a similar mechanism that: > (netif_tx_lock_bh / __dev_addr_discard / netif_tx_unlock_bh), > they should merged into one to eliminate duplicates in acquiring and > releasing the dev->_xmit_lock, this would be done in my following patch. > > Signed-off-by: Denis Cheng <crquan@gmail.com> Patch applied, thanks. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 9:11 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c David Miller @ 2007-07-18 9:59 ` rae l 2007-07-18 10:01 ` Patrick McHardy 2007-07-18 10:03 ` David Miller 0 siblings, 2 replies; 18+ messages in thread From: rae l @ 2007-07-18 9:59 UTC (permalink / raw) To: David Miller; +Cc: netdev, kuznet, pekkas, jmorris, kaber, linux-kernel On 7/18/07, David Miller <davem@davemloft.net> wrote: > From: Denis Cheng <crquan@gmail.com> > Date: Wed, 18 Jul 2007 10:41:03 +0800 > > > Because this function is only called by unregister_netdevice, > > this moving could make this non-global function static, > > and also remove its declaration in netdevice.h; > > > > Any further, function __dev_addr_discard is also just called by > > dev_mc_discard and dev_unicast_discard, keeping this two functions > > both in one c file could make __dev_addr_discard also static > > and remove its declaration in netdevice.h; > > > > Futhermore, the sequential call to dev_unicast_discard and then > > dev_mc_discard in unregister_netdevice have a similar mechanism that: > > (netif_tx_lock_bh / __dev_addr_discard / netif_tx_unlock_bh), > > they should merged into one to eliminate duplicates in acquiring and > > releasing the dev->_xmit_lock, this would be done in my following patch. > > > > Signed-off-by: Denis Cheng <crquan@gmail.com> > > Patch applied, thanks. Thanks for applying, too. And then the dev_mcast.c is now only 256 lines long(versus dev.c 4052 lines), just left a few multicast related functions definition and "dev_mcast" procfs code, I have an idea to merge all code dev_mcast.c into dev.c, that would: - remove two functions (__dev_addr_delete, __dev_set_rx_mode) from netdevice.h, and then tag them static, those two are also defined in dev.c and only called from dev_mcast.c, - reducing one file would benefit the compilation process. All in one word, I don't think the single file dev_mcast.c is needed anymore. > -- Denis Cheng Linux Application Developer "One of my most productive days was throwing away 1000 lines of code." - Ken Thompson. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 9:59 ` rae l @ 2007-07-18 10:01 ` Patrick McHardy 2007-07-18 10:04 ` David Miller 2007-07-18 10:03 ` David Miller 1 sibling, 1 reply; 18+ messages in thread From: Patrick McHardy @ 2007-07-18 10:01 UTC (permalink / raw) To: rae l; +Cc: David Miller, netdev, kuznet, pekkas, jmorris, linux-kernel rae l wrote: > All in one word, I don't think the single file dev_mcast.c is needed > anymore. Agreed. But dev.c is growing larger and larger, maybe dev_addr.c? Or dev_config.c, with some of the other device configuration functions? ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 10:01 ` Patrick McHardy @ 2007-07-18 10:04 ` David Miller 2007-07-18 10:10 ` Patrick McHardy 0 siblings, 1 reply; 18+ messages in thread From: David Miller @ 2007-07-18 10:04 UTC (permalink / raw) To: kaber; +Cc: crquan, netdev, kuznet, pekkas, jmorris, linux-kernel From: Patrick McHardy <kaber@trash.net> Date: Wed, 18 Jul 2007 12:01:38 +0200 > rae l wrote: > > All in one word, I don't think the single file dev_mcast.c is needed > > anymore. > > Agreed. But dev.c is growing larger and larger, maybe dev_addr.c? > Or dev_config.c, with some of the other device configuration functions? I don't know, a sizable dev.c is inevitable, allows better refactoring and consolidation. And the be honest you're going to have to likely touch things in dev.c whenever you make changes to dev_addr.c or whatever you want to name it. :-) ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 10:04 ` David Miller @ 2007-07-18 10:10 ` Patrick McHardy 0 siblings, 0 replies; 18+ messages in thread From: Patrick McHardy @ 2007-07-18 10:10 UTC (permalink / raw) To: David Miller; +Cc: crquan, netdev, kuznet, pekkas, jmorris, linux-kernel David Miller wrote: > From: Patrick McHardy <kaber@trash.net> > Date: Wed, 18 Jul 2007 12:01:38 +0200 > > >>rae l wrote: >> >>>All in one word, I don't think the single file dev_mcast.c is needed >>>anymore. >> >>Agreed. But dev.c is growing larger and larger, maybe dev_addr.c? >>Or dev_config.c, with some of the other device configuration functions? > > > I don't know, a sizable dev.c is inevitable, allows better refactoring > and consolidation. And the be honest you're going to have to likely > touch things in dev.c whenever you make changes to dev_addr.c or > whatever you want to name it. :-) You're probably right. Killing dev_mcast.c makes sense to me though. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c 2007-07-18 9:59 ` rae l 2007-07-18 10:01 ` Patrick McHardy @ 2007-07-18 10:03 ` David Miller 2007-07-18 11:30 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c Denis Cheng 1 sibling, 1 reply; 18+ messages in thread From: David Miller @ 2007-07-18 10:03 UTC (permalink / raw) To: crquan; +Cc: netdev, kuznet, pekkas, jmorris, kaber, linux-kernel From: "rae l" <crquan@gmail.com> Date: Wed, 18 Jul 2007 17:59:52 +0800 > And then the dev_mcast.c is now only 256 lines long(versus dev.c 4052 lines), > just left a few multicast related functions definition and "dev_mcast" > procfs code, > I have an idea to merge all code dev_mcast.c into dev.c, that would: > > - remove two functions (__dev_addr_delete, __dev_set_rx_mode) from netdevice.h, > and then tag them static, > those two are also defined in dev.c and only called from dev_mcast.c, > > - reducing one file would benefit the compilation process. > > All in one word, I don't think the single file dev_mcast.c is needed anymore. Agreed. ^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c 2007-07-18 10:03 ` David Miller @ 2007-07-18 11:30 ` Denis Cheng 2007-07-18 11:30 ` [PATCH 2/2] net/core: some functions' definition order adjustment for readability Denis Cheng 2007-07-20 1:51 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c rae l 0 siblings, 2 replies; 18+ messages in thread From: Denis Cheng @ 2007-07-18 11:30 UTC (permalink / raw) To: David Miller Cc: netdev, kuznet, Patrick McHardy, pekkas, jmorris, linux-kernel, Denis Cheng - removed three function declarations from header file to mark them static, - reduced one file Signed-off-by: Denis Cheng <crquan@gmail.com> --- this one is just merging by concatenating, and I'll try to adjust some function definitions' order to make it more readable. include/linux/netdevice.h | 3 - net/core/Makefile | 2 +- net/core/dev.c | 239 +++++++++++++++++++++++++++++++++++++++++- net/core/dev_mcast.c | 255 --------------------------------------------- 4 files changed, 237 insertions(+), 262 deletions(-) delete mode 100644 net/core/dev_mcast.c diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 9820ca1..ca68c58 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1091,15 +1091,12 @@ extern int register_netdev(struct net_device *dev); extern void unregister_netdev(struct net_device *dev); /* Functions used for secondary unicast and multicast support */ extern void dev_set_rx_mode(struct net_device *dev); -extern void __dev_set_rx_mode(struct net_device *dev); extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); extern int dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly); extern int dev_mc_sync(struct net_device *to, struct net_device *from); extern void dev_mc_unsync(struct net_device *to, struct net_device *from); -extern int __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all); -extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); extern void dev_set_promiscuity(struct net_device *dev, int inc); extern void dev_set_allmulti(struct net_device *dev, int inc); extern void netdev_state_change(struct net_device *dev); diff --git a/net/core/Makefile b/net/core/Makefile index 4751613..54d28dd 100644 --- a/net/core/Makefile +++ b/net/core/Makefile @@ -7,7 +7,7 @@ obj-y := sock.o request_sock.o skbuff.o iovec.o datagram.o stream.o scm.o \ obj-$(CONFIG_SYSCTL) += sysctl_net_core.o -obj-y += dev.o ethtool.o dev_mcast.o dst.o netevent.o \ +obj-y += dev.o ethtool.o dst.o netevent.o \ neighbour.o rtnetlink.o utils.o link_watch.o filter.o obj-$(CONFIG_XFRM) += flow.o diff --git a/net/core/dev.c b/net/core/dev.c index 6357f54..16842af 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -18,6 +18,7 @@ * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> * Adam Sulmicki <adam@cfar.umd.edu> * Pekka Riikonen <priikone@poesidon.pspt.fi> + * Denis Cheng <crquan@gmail.com> * * Changes: * D.J. Barrow : Fixed bug where dev->refcnt gets set @@ -70,6 +71,32 @@ * indefinitely on dev->refcnt * J Hadi Salim : - Backlog queue sampling * - netif_rx() feedback + * Denis Cheng : Merge dev_mcast.c into it + */ + +/* + * The original information in dev_mcast.c: + * + * Linux NET3: Multicast List maintenance. + * + * Authors: + * Tim Kordas <tjk@nostromo.eeap.cwru.edu> + * Richard Underwood <richard@wuzz.demon.co.uk> + * + * Stir fried together from the IP multicast and CAP patches above + * Alan Cox <Alan.Cox@linux.org> + * + * Fixes: + * Alan Cox : Update the device on a real delete + * rather than any time but... + * Alan Cox : IFF_ALLMULTI support. + * Alan Cox : New format set_multicast_list() calls. + * Gleb Natapov : Remove dev_mc_lock. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. */ #include <asm/uaccess.h> @@ -2622,7 +2649,7 @@ void dev_set_allmulti(struct net_device *dev, int inc) * filtering it is put in promiscous mode while unicast addresses * are present. */ -void __dev_set_rx_mode(struct net_device *dev) +static void __dev_set_rx_mode(struct net_device *dev) { /* dev_open will call this function so the list will stay sane. */ if (!(dev->flags&IFF_UP)) @@ -2657,7 +2684,7 @@ void dev_set_rx_mode(struct net_device *dev) netif_tx_unlock_bh(dev); } -int __dev_addr_delete(struct dev_addr_list **list, int *count, +static int __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int glbl) { struct dev_addr_list *da; @@ -2683,7 +2710,7 @@ int __dev_addr_delete(struct dev_addr_list **list, int *count, return -ENOENT; } -int __dev_addr_add(struct dev_addr_list **list, int *count, +static int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int glbl) { struct dev_addr_list *da; @@ -4049,3 +4076,209 @@ EXPORT_SYMBOL(dev_load); #endif EXPORT_PER_CPU_SYMBOL(softnet_data); + +/* + * Device multicast list maintenance. + * + * This is used both by IP and by the user level maintenance functions. + * Unlike BSD we maintain a usage count on a given multicast address so + * that a casual user application can add/delete multicasts used by + * protocols without doing damage to the protocols when it deletes the + * entries. It also helps IP as it tracks overlapping maps. + * + * Device mc lists are changed by bh at least if IPv6 is enabled, + * so that it must be bh protected. + * + * We block accesses to device mc filters with netif_tx_lock. + */ + +/* + * Delete a device level multicast + */ + +int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) +{ + int err; + + netif_tx_lock_bh(dev); + err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, + addr, alen, glbl); + if (!err) { + /* + * We have altered the list, so the card + * loaded filter is now wrong. Fix it + */ + + __dev_set_rx_mode(dev); + } + netif_tx_unlock_bh(dev); + return err; +} + +/* + * Add a device level multicast + */ + +int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) +{ + int err; + + netif_tx_lock_bh(dev); + err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); + if (!err) + __dev_set_rx_mode(dev); + netif_tx_unlock_bh(dev); + return err; +} + +/** + * dev_mc_sync - Synchronize device's multicast list to another device + * @to: destination device + * @from: source device + * + * Add newly added addresses to the destination device and release + * addresses that have no users left. The source device must be + * locked by netif_tx_lock_bh. + * + * This function is intended to be called from the dev->set_multicast_list + * function of layered software devices. + */ +int dev_mc_sync(struct net_device *to, struct net_device *from) +{ + struct dev_addr_list *da; + int err = 0; + + netif_tx_lock_bh(to); + for (da = from->mc_list; da != NULL; da = da->next) { + if (!da->da_synced) { + err = __dev_addr_add(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + if (err < 0) + break; + da->da_synced = 1; + da->da_users++; + } else if (da->da_users == 1) { + __dev_addr_delete(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + __dev_addr_delete(&from->mc_list, &from->mc_count, + da->da_addr, da->da_addrlen, 0); + } + } + if (!err) + __dev_set_rx_mode(to); + netif_tx_unlock_bh(to); + + return err; +} +EXPORT_SYMBOL(dev_mc_sync); + + +/** + * dev_mc_unsync - Remove synchronized addresses from the destination + * device + * @to: destination device + * @from: source device + * + * Remove all addresses that were added to the destination device by + * dev_mc_sync(). This function is intended to be called from the + * dev->stop function of layered software devices. + */ +void dev_mc_unsync(struct net_device *to, struct net_device *from) +{ + struct dev_addr_list *da; + + netif_tx_lock_bh(from); + netif_tx_lock_bh(to); + + for (da = from->mc_list; da != NULL; da = da->next) { + if (!da->da_synced) + continue; + __dev_addr_delete(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + da->da_synced = 0; + __dev_addr_delete(&from->mc_list, &from->mc_count, + da->da_addr, da->da_addrlen, 0); + } + __dev_set_rx_mode(to); + + netif_tx_unlock_bh(to); + netif_tx_unlock_bh(from); +} +EXPORT_SYMBOL(dev_mc_unsync); + +#ifdef CONFIG_PROC_FS +static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct net_device *dev; + loff_t off = 0; + + read_lock(&dev_base_lock); + for_each_netdev(dev) { + if (off++ == *pos) + return dev; + } + return NULL; +} + +static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; + return next_net_device((struct net_device *)v); +} + +static void dev_mc_seq_stop(struct seq_file *seq, void *v) +{ + read_unlock(&dev_base_lock); +} + + +static int dev_mc_seq_show(struct seq_file *seq, void *v) +{ + struct dev_addr_list *m; + struct net_device *dev = v; + + netif_tx_lock_bh(dev); + for (m = dev->mc_list; m; m = m->next) { + int i; + + seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, + dev->name, m->dmi_users, m->dmi_gusers); + + for (i = 0; i < m->dmi_addrlen; i++) + seq_printf(seq, "%02x", m->dmi_addr[i]); + + seq_putc(seq, '\n'); + } + netif_tx_unlock_bh(dev); + return 0; +} + +static const struct seq_operations dev_mc_seq_ops = { + .start = dev_mc_seq_start, + .next = dev_mc_seq_next, + .stop = dev_mc_seq_stop, + .show = dev_mc_seq_show, +}; + +static int dev_mc_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &dev_mc_seq_ops); +} + +static const struct file_operations dev_mc_seq_fops = { + .owner = THIS_MODULE, + .open = dev_mc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +#endif + +void __init dev_mcast_init(void) +{ + proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); +} + +EXPORT_SYMBOL(dev_mc_add); +EXPORT_SYMBOL(dev_mc_delete); diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c deleted file mode 100644 index 99aece1..0000000 --- a/net/core/dev_mcast.c +++ /dev/null @@ -1,255 +0,0 @@ -/* - * Linux NET3: Multicast List maintenance. - * - * Authors: - * Tim Kordas <tjk@nostromo.eeap.cwru.edu> - * Richard Underwood <richard@wuzz.demon.co.uk> - * - * Stir fried together from the IP multicast and CAP patches above - * Alan Cox <Alan.Cox@linux.org> - * - * Fixes: - * Alan Cox : Update the device on a real delete - * rather than any time but... - * Alan Cox : IFF_ALLMULTI support. - * Alan Cox : New format set_multicast_list() calls. - * Gleb Natapov : Remove dev_mc_lock. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version - * 2 of the License, or (at your option) any later version. - */ - -#include <linux/module.h> -#include <asm/uaccess.h> -#include <asm/system.h> -#include <linux/bitops.h> -#include <linux/types.h> -#include <linux/kernel.h> -#include <linux/string.h> -#include <linux/mm.h> -#include <linux/socket.h> -#include <linux/sockios.h> -#include <linux/in.h> -#include <linux/errno.h> -#include <linux/interrupt.h> -#include <linux/if_ether.h> -#include <linux/inet.h> -#include <linux/netdevice.h> -#include <linux/etherdevice.h> -#include <linux/proc_fs.h> -#include <linux/seq_file.h> -#include <linux/init.h> -#include <net/ip.h> -#include <net/route.h> -#include <linux/skbuff.h> -#include <net/sock.h> -#include <net/arp.h> - - -/* - * Device multicast list maintenance. - * - * This is used both by IP and by the user level maintenance functions. - * Unlike BSD we maintain a usage count on a given multicast address so - * that a casual user application can add/delete multicasts used by - * protocols without doing damage to the protocols when it deletes the - * entries. It also helps IP as it tracks overlapping maps. - * - * Device mc lists are changed by bh at least if IPv6 is enabled, - * so that it must be bh protected. - * - * We block accesses to device mc filters with netif_tx_lock. - */ - -/* - * Delete a device level multicast - */ - -int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) -{ - int err; - - netif_tx_lock_bh(dev); - err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, - addr, alen, glbl); - if (!err) { - /* - * We have altered the list, so the card - * loaded filter is now wrong. Fix it - */ - - __dev_set_rx_mode(dev); - } - netif_tx_unlock_bh(dev); - return err; -} - -/* - * Add a device level multicast - */ - -int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) -{ - int err; - - netif_tx_lock_bh(dev); - err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); - if (!err) - __dev_set_rx_mode(dev); - netif_tx_unlock_bh(dev); - return err; -} - -/** - * dev_mc_sync - Synchronize device's multicast list to another device - * @to: destination device - * @from: source device - * - * Add newly added addresses to the destination device and release - * addresses that have no users left. The source device must be - * locked by netif_tx_lock_bh. - * - * This function is intended to be called from the dev->set_multicast_list - * function of layered software devices. - */ -int dev_mc_sync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da; - int err = 0; - - netif_tx_lock_bh(to); - for (da = from->mc_list; da != NULL; da = da->next) { - if (!da->da_synced) { - err = __dev_addr_add(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - if (err < 0) - break; - da->da_synced = 1; - da->da_users++; - } else if (da->da_users == 1) { - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - } - } - if (!err) - __dev_set_rx_mode(to); - netif_tx_unlock_bh(to); - - return err; -} -EXPORT_SYMBOL(dev_mc_sync); - - -/** - * dev_mc_unsync - Remove synchronized addresses from the destination - * device - * @to: destination device - * @from: source device - * - * Remove all addresses that were added to the destination device by - * dev_mc_sync(). This function is intended to be called from the - * dev->stop function of layered software devices. - */ -void dev_mc_unsync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da; - - netif_tx_lock_bh(from); - netif_tx_lock_bh(to); - - for (da = from->mc_list; da != NULL; da = da->next) { - if (!da->da_synced) - continue; - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - da->da_synced = 0; - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - } - __dev_set_rx_mode(to); - - netif_tx_unlock_bh(to); - netif_tx_unlock_bh(from); -} -EXPORT_SYMBOL(dev_mc_unsync); - -#ifdef CONFIG_PROC_FS -static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) -{ - struct net_device *dev; - loff_t off = 0; - - read_lock(&dev_base_lock); - for_each_netdev(dev) { - if (off++ == *pos) - return dev; - } - return NULL; -} - -static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - ++*pos; - return next_net_device((struct net_device *)v); -} - -static void dev_mc_seq_stop(struct seq_file *seq, void *v) -{ - read_unlock(&dev_base_lock); -} - - -static int dev_mc_seq_show(struct seq_file *seq, void *v) -{ - struct dev_addr_list *m; - struct net_device *dev = v; - - netif_tx_lock_bh(dev); - for (m = dev->mc_list; m; m = m->next) { - int i; - - seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, - dev->name, m->dmi_users, m->dmi_gusers); - - for (i = 0; i < m->dmi_addrlen; i++) - seq_printf(seq, "%02x", m->dmi_addr[i]); - - seq_putc(seq, '\n'); - } - netif_tx_unlock_bh(dev); - return 0; -} - -static const struct seq_operations dev_mc_seq_ops = { - .start = dev_mc_seq_start, - .next = dev_mc_seq_next, - .stop = dev_mc_seq_stop, - .show = dev_mc_seq_show, -}; - -static int dev_mc_seq_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &dev_mc_seq_ops); -} - -static const struct file_operations dev_mc_seq_fops = { - .owner = THIS_MODULE, - .open = dev_mc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -#endif - -void __init dev_mcast_init(void) -{ - proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); -} - -EXPORT_SYMBOL(dev_mc_add); -EXPORT_SYMBOL(dev_mc_delete); -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* [PATCH 2/2] net/core: some functions' definition order adjustment for readability 2007-07-18 11:30 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c Denis Cheng @ 2007-07-18 11:30 ` Denis Cheng 2007-07-18 12:39 ` Patrick McHardy 2007-07-20 1:51 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c rae l 1 sibling, 1 reply; 18+ messages in thread From: Denis Cheng @ 2007-07-18 11:30 UTC (permalink / raw) To: David Miller Cc: netdev, kuznet, Patrick McHardy, pekkas, jmorris, linux-kernel, Denis Cheng Signed-off-by: Denis Cheng <crquan@gmail.com> --- net/core/dev.c | 407 ++++++++++++++++++++++++++++---------------------------- 1 files changed, 201 insertions(+), 206 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 16842af..ee567dd 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2790,6 +2790,134 @@ int dev_unicast_add(struct net_device *dev, void *addr, int alen) } EXPORT_SYMBOL(dev_unicast_add); +/* + * Device multicast list maintenance. + * + * This is used both by IP and by the user level maintenance functions. + * Unlike BSD we maintain a usage count on a given multicast address so + * that a casual user application can add/delete multicasts used by + * protocols without doing damage to the protocols when it deletes the + * entries. It also helps IP as it tracks overlapping maps. + * + * Device mc lists are changed by bh at least if IPv6 is enabled, + * so that it must be bh protected. + * + * We block accesses to device mc filters with netif_tx_lock. + */ + +/* + * Delete a device level multicast + */ +int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) +{ + int err; + + netif_tx_lock_bh(dev); + err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, + addr, alen, glbl); + if (!err) { + /* + * We have altered the list, so the card + * loaded filter is now wrong. Fix it + */ + + __dev_set_rx_mode(dev); + } + netif_tx_unlock_bh(dev); + return err; +} +EXPORT_SYMBOL(dev_mc_delete); + +/* + * Add a device level multicast + */ +int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) +{ + int err; + + netif_tx_lock_bh(dev); + err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); + if (!err) + __dev_set_rx_mode(dev); + netif_tx_unlock_bh(dev); + return err; +} +EXPORT_SYMBOL(dev_mc_add); + +/** + * dev_mc_sync - Synchronize device's multicast list to another device + * @to: destination device + * @from: source device + * + * Add newly added addresses to the destination device and release + * addresses that have no users left. The source device must be + * locked by netif_tx_lock_bh. + * + * This function is intended to be called from the dev->set_multicast_list + * function of layered software devices. + */ +int dev_mc_sync(struct net_device *to, struct net_device *from) +{ + struct dev_addr_list *da; + int err = 0; + + netif_tx_lock_bh(to); + for (da = from->mc_list; da != NULL; da = da->next) { + if (!da->da_synced) { + err = __dev_addr_add(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + if (err < 0) + break; + da->da_synced = 1; + da->da_users++; + } else if (da->da_users == 1) { + __dev_addr_delete(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + __dev_addr_delete(&from->mc_list, &from->mc_count, + da->da_addr, da->da_addrlen, 0); + } + } + if (!err) + __dev_set_rx_mode(to); + netif_tx_unlock_bh(to); + + return err; +} +EXPORT_SYMBOL(dev_mc_sync); + +/** + * dev_mc_unsync - Remove synchronized addresses from the destination + * device + * @to: destination device + * @from: source device + * + * Remove all addresses that were added to the destination device by + * dev_mc_sync(). This function is intended to be called from the + * dev->stop function of layered software devices. + */ +void dev_mc_unsync(struct net_device *to, struct net_device *from) +{ + struct dev_addr_list *da; + + netif_tx_lock_bh(from); + netif_tx_lock_bh(to); + + for (da = from->mc_list; da != NULL; da = da->next) { + if (!da->da_synced) + continue; + __dev_addr_delete(&to->mc_list, &to->mc_count, + da->da_addr, da->da_addrlen, 0); + da->da_synced = 0; + __dev_addr_delete(&from->mc_list, &from->mc_count, + da->da_addr, da->da_addrlen, 0); + } + __dev_set_rx_mode(to); + + netif_tx_unlock_bh(to); + netif_tx_unlock_bh(from); +} +EXPORT_SYMBOL(dev_mc_unsync); + static void __dev_addr_discard(struct dev_addr_list **list) { struct dev_addr_list *tmp; @@ -3963,6 +4091,79 @@ static int __init netdev_dma_register(void) static int __init netdev_dma_register(void) { return -ENODEV; } #endif /* CONFIG_NET_DMA */ +#ifdef CONFIG_PROC_FS +static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) +{ + struct net_device *dev; + loff_t off = 0; + + read_lock(&dev_base_lock); + for_each_netdev(dev) { + if (off++ == *pos) + return dev; + } + return NULL; +} + +static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) +{ + ++*pos; + return next_net_device((struct net_device *)v); +} + +static void dev_mc_seq_stop(struct seq_file *seq, void *v) +{ + read_unlock(&dev_base_lock); +} + +static int dev_mc_seq_show(struct seq_file *seq, void *v) +{ + struct dev_addr_list *m; + struct net_device *dev = v; + + netif_tx_lock_bh(dev); + for (m = dev->mc_list; m; m = m->next) { + int i; + + seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, + dev->name, m->dmi_users, m->dmi_gusers); + + for (i = 0; i < m->dmi_addrlen; i++) + seq_printf(seq, "%02x", m->dmi_addr[i]); + + seq_putc(seq, '\n'); + } + netif_tx_unlock_bh(dev); + return 0; +} + +static const struct seq_operations dev_mc_seq_ops = { + .start = dev_mc_seq_start, + .next = dev_mc_seq_next, + .stop = dev_mc_seq_stop, + .show = dev_mc_seq_show, +}; + +static int dev_mc_seq_open(struct inode *inode, struct file *file) +{ + return seq_open(file, &dev_mc_seq_ops); +} + +static const struct file_operations dev_mc_seq_fops = { + .owner = THIS_MODULE, + .open = dev_mc_seq_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; + +#endif + +void __init dev_mcast_init(void) +{ + proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); +} + /* * Initialize the DEV module. At boot time this walks the device list and * unhooks any devices that fail to initialise (normally hardware not @@ -4076,209 +4277,3 @@ EXPORT_SYMBOL(dev_load); #endif EXPORT_PER_CPU_SYMBOL(softnet_data); - -/* - * Device multicast list maintenance. - * - * This is used both by IP and by the user level maintenance functions. - * Unlike BSD we maintain a usage count on a given multicast address so - * that a casual user application can add/delete multicasts used by - * protocols without doing damage to the protocols when it deletes the - * entries. It also helps IP as it tracks overlapping maps. - * - * Device mc lists are changed by bh at least if IPv6 is enabled, - * so that it must be bh protected. - * - * We block accesses to device mc filters with netif_tx_lock. - */ - -/* - * Delete a device level multicast - */ - -int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) -{ - int err; - - netif_tx_lock_bh(dev); - err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, - addr, alen, glbl); - if (!err) { - /* - * We have altered the list, so the card - * loaded filter is now wrong. Fix it - */ - - __dev_set_rx_mode(dev); - } - netif_tx_unlock_bh(dev); - return err; -} - -/* - * Add a device level multicast - */ - -int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) -{ - int err; - - netif_tx_lock_bh(dev); - err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); - if (!err) - __dev_set_rx_mode(dev); - netif_tx_unlock_bh(dev); - return err; -} - -/** - * dev_mc_sync - Synchronize device's multicast list to another device - * @to: destination device - * @from: source device - * - * Add newly added addresses to the destination device and release - * addresses that have no users left. The source device must be - * locked by netif_tx_lock_bh. - * - * This function is intended to be called from the dev->set_multicast_list - * function of layered software devices. - */ -int dev_mc_sync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da; - int err = 0; - - netif_tx_lock_bh(to); - for (da = from->mc_list; da != NULL; da = da->next) { - if (!da->da_synced) { - err = __dev_addr_add(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - if (err < 0) - break; - da->da_synced = 1; - da->da_users++; - } else if (da->da_users == 1) { - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - } - } - if (!err) - __dev_set_rx_mode(to); - netif_tx_unlock_bh(to); - - return err; -} -EXPORT_SYMBOL(dev_mc_sync); - - -/** - * dev_mc_unsync - Remove synchronized addresses from the destination - * device - * @to: destination device - * @from: source device - * - * Remove all addresses that were added to the destination device by - * dev_mc_sync(). This function is intended to be called from the - * dev->stop function of layered software devices. - */ -void dev_mc_unsync(struct net_device *to, struct net_device *from) -{ - struct dev_addr_list *da; - - netif_tx_lock_bh(from); - netif_tx_lock_bh(to); - - for (da = from->mc_list; da != NULL; da = da->next) { - if (!da->da_synced) - continue; - __dev_addr_delete(&to->mc_list, &to->mc_count, - da->da_addr, da->da_addrlen, 0); - da->da_synced = 0; - __dev_addr_delete(&from->mc_list, &from->mc_count, - da->da_addr, da->da_addrlen, 0); - } - __dev_set_rx_mode(to); - - netif_tx_unlock_bh(to); - netif_tx_unlock_bh(from); -} -EXPORT_SYMBOL(dev_mc_unsync); - -#ifdef CONFIG_PROC_FS -static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) -{ - struct net_device *dev; - loff_t off = 0; - - read_lock(&dev_base_lock); - for_each_netdev(dev) { - if (off++ == *pos) - return dev; - } - return NULL; -} - -static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - ++*pos; - return next_net_device((struct net_device *)v); -} - -static void dev_mc_seq_stop(struct seq_file *seq, void *v) -{ - read_unlock(&dev_base_lock); -} - - -static int dev_mc_seq_show(struct seq_file *seq, void *v) -{ - struct dev_addr_list *m; - struct net_device *dev = v; - - netif_tx_lock_bh(dev); - for (m = dev->mc_list; m; m = m->next) { - int i; - - seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, - dev->name, m->dmi_users, m->dmi_gusers); - - for (i = 0; i < m->dmi_addrlen; i++) - seq_printf(seq, "%02x", m->dmi_addr[i]); - - seq_putc(seq, '\n'); - } - netif_tx_unlock_bh(dev); - return 0; -} - -static const struct seq_operations dev_mc_seq_ops = { - .start = dev_mc_seq_start, - .next = dev_mc_seq_next, - .stop = dev_mc_seq_stop, - .show = dev_mc_seq_show, -}; - -static int dev_mc_seq_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &dev_mc_seq_ops); -} - -static const struct file_operations dev_mc_seq_fops = { - .owner = THIS_MODULE, - .open = dev_mc_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; - -#endif - -void __init dev_mcast_init(void) -{ - proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); -} - -EXPORT_SYMBOL(dev_mc_add); -EXPORT_SYMBOL(dev_mc_delete); -- 1.5.2.2 ^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [PATCH 2/2] net/core: some functions' definition order adjustment for readability 2007-07-18 11:30 ` [PATCH 2/2] net/core: some functions' definition order adjustment for readability Denis Cheng @ 2007-07-18 12:39 ` Patrick McHardy 2007-07-18 14:31 ` rae l 0 siblings, 1 reply; 18+ messages in thread From: Patrick McHardy @ 2007-07-18 12:39 UTC (permalink / raw) To: Denis Cheng; +Cc: David Miller, netdev, kuznet, pekkas, jmorris, linux-kernel This could be done in the patch moving it .. anyways, Denis Cheng wrote: > +#ifdef CONFIG_PROC_FS > +static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) If you're interested in doing more work, it would be nice to generalize the seq-file functions for unicast and multicast address lists and add /proc/net/dev_unicast or something like that. OTOH we could also export this using rtnetlink. The main reason why I didn't do that is that it can only be read, not changed, but this is also true for statistics etc. Any opinions on this? ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 2/2] net/core: some functions' definition order adjustment for readability 2007-07-18 12:39 ` Patrick McHardy @ 2007-07-18 14:31 ` rae l 0 siblings, 0 replies; 18+ messages in thread From: rae l @ 2007-07-18 14:31 UTC (permalink / raw) To: Patrick McHardy Cc: David Miller, netdev, kuznet, pekkas, jmorris, linux-kernel On 7/18/07, Patrick McHardy <kaber@trash.net> wrote: > This could be done in the patch moving it .. anyways, What? > > > Denis Cheng wrote: > > +#ifdef CONFIG_PROC_FS > > +static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) > > > If you're interested in doing more work, it would be nice to > generalize the seq-file functions for unicast and multicast > address lists and add /proc/net/dev_unicast or something like > that. Eh, there is already a dev_multicast file but lack of dev_unicast, but is dev_unicast really useful? > > OTOH we could also export this using rtnetlink. The main reason > why I didn't do that is that it can only be read, not changed, > but this is also true for statistics etc. Any opinions on this? how to do that? > > -- Denis Cheng Linux Application Developer "One of my most productive days was throwing away 1000 lines of code." - Ken Thompson. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c 2007-07-18 11:30 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c Denis Cheng 2007-07-18 11:30 ` [PATCH 2/2] net/core: some functions' definition order adjustment for readability Denis Cheng @ 2007-07-20 1:51 ` rae l 2007-07-20 3:04 ` David Miller 1 sibling, 1 reply; 18+ messages in thread From: rae l @ 2007-07-20 1:51 UTC (permalink / raw) To: David Miller Cc: netdev, kuznet, Patrick McHardy, pekkas, jmorris, linux-kernel, Denis Cheng On 7/18/07, Denis Cheng <crquan@gmail.com> wrote: > - removed three function declarations from header file to mark them static, > - reduced one file > > Signed-off-by: Denis Cheng <crquan@gmail.com> > --- > > this one is just merging by concatenating, and I'll try to adjust some > function definitions' order to make it more readable. > > include/linux/netdevice.h | 3 - > net/core/Makefile | 2 +- > net/core/dev.c | 239 +++++++++++++++++++++++++++++++++++++++++- > net/core/dev_mcast.c | 255 --------------------------------------------- > 4 files changed, 237 insertions(+), 262 deletions(-) > delete mode 100644 net/core/dev_mcast.c > > diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h > index 9820ca1..ca68c58 100644 > --- a/include/linux/netdevice.h > +++ b/include/linux/netdevice.h > @@ -1091,15 +1091,12 @@ extern int register_netdev(struct net_device *dev); > extern void unregister_netdev(struct net_device *dev); > /* Functions used for secondary unicast and multicast support */ > extern void dev_set_rx_mode(struct net_device *dev); > -extern void __dev_set_rx_mode(struct net_device *dev); > extern int dev_unicast_delete(struct net_device *dev, void *addr, int alen); > extern int dev_unicast_add(struct net_device *dev, void *addr, int alen); > extern int dev_mc_delete(struct net_device *dev, void *addr, int alen, int all); > extern int dev_mc_add(struct net_device *dev, void *addr, int alen, int newonly); > extern int dev_mc_sync(struct net_device *to, struct net_device *from); > extern void dev_mc_unsync(struct net_device *to, struct net_device *from); > -extern int __dev_addr_delete(struct dev_addr_list **list, int *count, void *addr, int alen, int all); > -extern int __dev_addr_add(struct dev_addr_list **list, int *count, void *addr, int alen, int newonly); > extern void dev_set_promiscuity(struct net_device *dev, int inc); > extern void dev_set_allmulti(struct net_device *dev, int inc); > extern void netdev_state_change(struct net_device *dev); > diff --git a/net/core/Makefile b/net/core/Makefile > index 4751613..54d28dd 100644 > --- a/net/core/Makefile > +++ b/net/core/Makefile > @@ -7,7 +7,7 @@ obj-y := sock.o request_sock.o skbuff.o iovec.o datagram.o stream.o scm.o \ > > obj-$(CONFIG_SYSCTL) += sysctl_net_core.o > > -obj-y += dev.o ethtool.o dev_mcast.o dst.o netevent.o \ > +obj-y += dev.o ethtool.o dst.o netevent.o \ > neighbour.o rtnetlink.o utils.o link_watch.o filter.o > > obj-$(CONFIG_XFRM) += flow.o > diff --git a/net/core/dev.c b/net/core/dev.c > index 6357f54..16842af 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -18,6 +18,7 @@ > * Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> > * Adam Sulmicki <adam@cfar.umd.edu> > * Pekka Riikonen <priikone@poesidon.pspt.fi> > + * Denis Cheng <crquan@gmail.com> > * > * Changes: > * D.J. Barrow : Fixed bug where dev->refcnt gets set > @@ -70,6 +71,32 @@ > * indefinitely on dev->refcnt > * J Hadi Salim : - Backlog queue sampling > * - netif_rx() feedback > + * Denis Cheng : Merge dev_mcast.c into it > + */ > + > +/* > + * The original information in dev_mcast.c: > + * > + * Linux NET3: Multicast List maintenance. > + * > + * Authors: > + * Tim Kordas <tjk@nostromo.eeap.cwru.edu> > + * Richard Underwood <richard@wuzz.demon.co.uk> > + * > + * Stir fried together from the IP multicast and CAP patches above > + * Alan Cox <Alan.Cox@linux.org> > + * > + * Fixes: > + * Alan Cox : Update the device on a real delete > + * rather than any time but... > + * Alan Cox : IFF_ALLMULTI support. > + * Alan Cox : New format set_multicast_list() calls. > + * Gleb Natapov : Remove dev_mc_lock. > + * > + * This program is free software; you can redistribute it and/or > + * modify it under the terms of the GNU General Public License > + * as published by the Free Software Foundation; either version > + * 2 of the License, or (at your option) any later version. > */ > > #include <asm/uaccess.h> > @@ -2622,7 +2649,7 @@ void dev_set_allmulti(struct net_device *dev, int inc) > * filtering it is put in promiscous mode while unicast addresses > * are present. > */ > -void __dev_set_rx_mode(struct net_device *dev) > +static void __dev_set_rx_mode(struct net_device *dev) > { > /* dev_open will call this function so the list will stay sane. */ > if (!(dev->flags&IFF_UP)) > @@ -2657,7 +2684,7 @@ void dev_set_rx_mode(struct net_device *dev) > netif_tx_unlock_bh(dev); > } > > -int __dev_addr_delete(struct dev_addr_list **list, int *count, > +static int __dev_addr_delete(struct dev_addr_list **list, int *count, > void *addr, int alen, int glbl) > { > struct dev_addr_list *da; > @@ -2683,7 +2710,7 @@ int __dev_addr_delete(struct dev_addr_list **list, int *count, > return -ENOENT; > } > > -int __dev_addr_add(struct dev_addr_list **list, int *count, > +static int __dev_addr_add(struct dev_addr_list **list, int *count, > void *addr, int alen, int glbl) > { > struct dev_addr_list *da; > @@ -4049,3 +4076,209 @@ EXPORT_SYMBOL(dev_load); > #endif > > EXPORT_PER_CPU_SYMBOL(softnet_data); > + > +/* > + * Device multicast list maintenance. > + * > + * This is used both by IP and by the user level maintenance functions. > + * Unlike BSD we maintain a usage count on a given multicast address so > + * that a casual user application can add/delete multicasts used by > + * protocols without doing damage to the protocols when it deletes the > + * entries. It also helps IP as it tracks overlapping maps. > + * > + * Device mc lists are changed by bh at least if IPv6 is enabled, > + * so that it must be bh protected. > + * > + * We block accesses to device mc filters with netif_tx_lock. > + */ > + > +/* > + * Delete a device level multicast > + */ > + > +int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) > +{ > + int err; > + > + netif_tx_lock_bh(dev); > + err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, > + addr, alen, glbl); > + if (!err) { > + /* > + * We have altered the list, so the card > + * loaded filter is now wrong. Fix it > + */ > + > + __dev_set_rx_mode(dev); > + } > + netif_tx_unlock_bh(dev); > + return err; > +} > + > +/* > + * Add a device level multicast > + */ > + > +int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) > +{ > + int err; > + > + netif_tx_lock_bh(dev); > + err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); > + if (!err) > + __dev_set_rx_mode(dev); > + netif_tx_unlock_bh(dev); > + return err; > +} > + > +/** > + * dev_mc_sync - Synchronize device's multicast list to another device > + * @to: destination device > + * @from: source device > + * > + * Add newly added addresses to the destination device and release > + * addresses that have no users left. The source device must be > + * locked by netif_tx_lock_bh. > + * > + * This function is intended to be called from the dev->set_multicast_list > + * function of layered software devices. > + */ > +int dev_mc_sync(struct net_device *to, struct net_device *from) > +{ > + struct dev_addr_list *da; > + int err = 0; > + > + netif_tx_lock_bh(to); > + for (da = from->mc_list; da != NULL; da = da->next) { > + if (!da->da_synced) { > + err = __dev_addr_add(&to->mc_list, &to->mc_count, > + da->da_addr, da->da_addrlen, 0); > + if (err < 0) > + break; > + da->da_synced = 1; > + da->da_users++; > + } else if (da->da_users == 1) { > + __dev_addr_delete(&to->mc_list, &to->mc_count, > + da->da_addr, da->da_addrlen, 0); > + __dev_addr_delete(&from->mc_list, &from->mc_count, > + da->da_addr, da->da_addrlen, 0); > + } > + } > + if (!err) > + __dev_set_rx_mode(to); > + netif_tx_unlock_bh(to); > + > + return err; > +} > +EXPORT_SYMBOL(dev_mc_sync); > + > + > +/** > + * dev_mc_unsync - Remove synchronized addresses from the destination > + * device > + * @to: destination device > + * @from: source device > + * > + * Remove all addresses that were added to the destination device by > + * dev_mc_sync(). This function is intended to be called from the > + * dev->stop function of layered software devices. > + */ > +void dev_mc_unsync(struct net_device *to, struct net_device *from) > +{ > + struct dev_addr_list *da; > + > + netif_tx_lock_bh(from); > + netif_tx_lock_bh(to); > + > + for (da = from->mc_list; da != NULL; da = da->next) { > + if (!da->da_synced) > + continue; > + __dev_addr_delete(&to->mc_list, &to->mc_count, > + da->da_addr, da->da_addrlen, 0); > + da->da_synced = 0; > + __dev_addr_delete(&from->mc_list, &from->mc_count, > + da->da_addr, da->da_addrlen, 0); > + } > + __dev_set_rx_mode(to); > + > + netif_tx_unlock_bh(to); > + netif_tx_unlock_bh(from); > +} > +EXPORT_SYMBOL(dev_mc_unsync); > + > +#ifdef CONFIG_PROC_FS > +static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) > +{ > + struct net_device *dev; > + loff_t off = 0; > + > + read_lock(&dev_base_lock); > + for_each_netdev(dev) { > + if (off++ == *pos) > + return dev; > + } > + return NULL; > +} > + > +static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) > +{ > + ++*pos; > + return next_net_device((struct net_device *)v); > +} > + > +static void dev_mc_seq_stop(struct seq_file *seq, void *v) > +{ > + read_unlock(&dev_base_lock); > +} > + > + > +static int dev_mc_seq_show(struct seq_file *seq, void *v) > +{ > + struct dev_addr_list *m; > + struct net_device *dev = v; > + > + netif_tx_lock_bh(dev); > + for (m = dev->mc_list; m; m = m->next) { > + int i; > + > + seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, > + dev->name, m->dmi_users, m->dmi_gusers); > + > + for (i = 0; i < m->dmi_addrlen; i++) > + seq_printf(seq, "%02x", m->dmi_addr[i]); > + > + seq_putc(seq, '\n'); > + } > + netif_tx_unlock_bh(dev); > + return 0; > +} > + > +static const struct seq_operations dev_mc_seq_ops = { > + .start = dev_mc_seq_start, > + .next = dev_mc_seq_next, > + .stop = dev_mc_seq_stop, > + .show = dev_mc_seq_show, > +}; > + > +static int dev_mc_seq_open(struct inode *inode, struct file *file) > +{ > + return seq_open(file, &dev_mc_seq_ops); > +} > + > +static const struct file_operations dev_mc_seq_fops = { > + .owner = THIS_MODULE, > + .open = dev_mc_seq_open, > + .read = seq_read, > + .llseek = seq_lseek, > + .release = seq_release, > +}; > + > +#endif > + > +void __init dev_mcast_init(void) > +{ > + proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); > +} > + > +EXPORT_SYMBOL(dev_mc_add); > +EXPORT_SYMBOL(dev_mc_delete); > diff --git a/net/core/dev_mcast.c b/net/core/dev_mcast.c > deleted file mode 100644 > index 99aece1..0000000 > --- a/net/core/dev_mcast.c > +++ /dev/null > @@ -1,255 +0,0 @@ > -/* > - * Linux NET3: Multicast List maintenance. > - * > - * Authors: > - * Tim Kordas <tjk@nostromo.eeap.cwru.edu> > - * Richard Underwood <richard@wuzz.demon.co.uk> > - * > - * Stir fried together from the IP multicast and CAP patches above > - * Alan Cox <Alan.Cox@linux.org> > - * > - * Fixes: > - * Alan Cox : Update the device on a real delete > - * rather than any time but... > - * Alan Cox : IFF_ALLMULTI support. > - * Alan Cox : New format set_multicast_list() calls. > - * Gleb Natapov : Remove dev_mc_lock. > - * > - * This program is free software; you can redistribute it and/or > - * modify it under the terms of the GNU General Public License > - * as published by the Free Software Foundation; either version > - * 2 of the License, or (at your option) any later version. > - */ > - > -#include <linux/module.h> > -#include <asm/uaccess.h> > -#include <asm/system.h> > -#include <linux/bitops.h> > -#include <linux/types.h> > -#include <linux/kernel.h> > -#include <linux/string.h> > -#include <linux/mm.h> > -#include <linux/socket.h> > -#include <linux/sockios.h> > -#include <linux/in.h> > -#include <linux/errno.h> > -#include <linux/interrupt.h> > -#include <linux/if_ether.h> > -#include <linux/inet.h> > -#include <linux/netdevice.h> > -#include <linux/etherdevice.h> > -#include <linux/proc_fs.h> > -#include <linux/seq_file.h> > -#include <linux/init.h> > -#include <net/ip.h> > -#include <net/route.h> > -#include <linux/skbuff.h> > -#include <net/sock.h> > -#include <net/arp.h> > - > - > -/* > - * Device multicast list maintenance. > - * > - * This is used both by IP and by the user level maintenance functions. > - * Unlike BSD we maintain a usage count on a given multicast address so > - * that a casual user application can add/delete multicasts used by > - * protocols without doing damage to the protocols when it deletes the > - * entries. It also helps IP as it tracks overlapping maps. > - * > - * Device mc lists are changed by bh at least if IPv6 is enabled, > - * so that it must be bh protected. > - * > - * We block accesses to device mc filters with netif_tx_lock. > - */ > - > -/* > - * Delete a device level multicast > - */ > - > -int dev_mc_delete(struct net_device *dev, void *addr, int alen, int glbl) > -{ > - int err; > - > - netif_tx_lock_bh(dev); > - err = __dev_addr_delete(&dev->mc_list, &dev->mc_count, > - addr, alen, glbl); > - if (!err) { > - /* > - * We have altered the list, so the card > - * loaded filter is now wrong. Fix it > - */ > - > - __dev_set_rx_mode(dev); > - } > - netif_tx_unlock_bh(dev); > - return err; > -} > - > -/* > - * Add a device level multicast > - */ > - > -int dev_mc_add(struct net_device *dev, void *addr, int alen, int glbl) > -{ > - int err; > - > - netif_tx_lock_bh(dev); > - err = __dev_addr_add(&dev->mc_list, &dev->mc_count, addr, alen, glbl); > - if (!err) > - __dev_set_rx_mode(dev); > - netif_tx_unlock_bh(dev); > - return err; > -} > - > -/** > - * dev_mc_sync - Synchronize device's multicast list to another device > - * @to: destination device > - * @from: source device > - * > - * Add newly added addresses to the destination device and release > - * addresses that have no users left. The source device must be > - * locked by netif_tx_lock_bh. > - * > - * This function is intended to be called from the dev->set_multicast_list > - * function of layered software devices. > - */ > -int dev_mc_sync(struct net_device *to, struct net_device *from) > -{ > - struct dev_addr_list *da; > - int err = 0; > - > - netif_tx_lock_bh(to); > - for (da = from->mc_list; da != NULL; da = da->next) { > - if (!da->da_synced) { > - err = __dev_addr_add(&to->mc_list, &to->mc_count, > - da->da_addr, da->da_addrlen, 0); > - if (err < 0) > - break; > - da->da_synced = 1; > - da->da_users++; > - } else if (da->da_users == 1) { > - __dev_addr_delete(&to->mc_list, &to->mc_count, > - da->da_addr, da->da_addrlen, 0); > - __dev_addr_delete(&from->mc_list, &from->mc_count, > - da->da_addr, da->da_addrlen, 0); > - } > - } > - if (!err) > - __dev_set_rx_mode(to); > - netif_tx_unlock_bh(to); > - > - return err; > -} > -EXPORT_SYMBOL(dev_mc_sync); > - > - > -/** > - * dev_mc_unsync - Remove synchronized addresses from the destination > - * device > - * @to: destination device > - * @from: source device > - * > - * Remove all addresses that were added to the destination device by > - * dev_mc_sync(). This function is intended to be called from the > - * dev->stop function of layered software devices. > - */ > -void dev_mc_unsync(struct net_device *to, struct net_device *from) > -{ > - struct dev_addr_list *da; > - > - netif_tx_lock_bh(from); > - netif_tx_lock_bh(to); > - > - for (da = from->mc_list; da != NULL; da = da->next) { > - if (!da->da_synced) > - continue; > - __dev_addr_delete(&to->mc_list, &to->mc_count, > - da->da_addr, da->da_addrlen, 0); > - da->da_synced = 0; > - __dev_addr_delete(&from->mc_list, &from->mc_count, > - da->da_addr, da->da_addrlen, 0); > - } > - __dev_set_rx_mode(to); > - > - netif_tx_unlock_bh(to); > - netif_tx_unlock_bh(from); > -} > -EXPORT_SYMBOL(dev_mc_unsync); > - > -#ifdef CONFIG_PROC_FS > -static void *dev_mc_seq_start(struct seq_file *seq, loff_t *pos) > -{ > - struct net_device *dev; > - loff_t off = 0; > - > - read_lock(&dev_base_lock); > - for_each_netdev(dev) { > - if (off++ == *pos) > - return dev; > - } > - return NULL; > -} > - > -static void *dev_mc_seq_next(struct seq_file *seq, void *v, loff_t *pos) > -{ > - ++*pos; > - return next_net_device((struct net_device *)v); > -} > - > -static void dev_mc_seq_stop(struct seq_file *seq, void *v) > -{ > - read_unlock(&dev_base_lock); > -} > - > - > -static int dev_mc_seq_show(struct seq_file *seq, void *v) > -{ > - struct dev_addr_list *m; > - struct net_device *dev = v; > - > - netif_tx_lock_bh(dev); > - for (m = dev->mc_list; m; m = m->next) { > - int i; > - > - seq_printf(seq, "%-4d %-15s %-5d %-5d ", dev->ifindex, > - dev->name, m->dmi_users, m->dmi_gusers); > - > - for (i = 0; i < m->dmi_addrlen; i++) > - seq_printf(seq, "%02x", m->dmi_addr[i]); > - > - seq_putc(seq, '\n'); > - } > - netif_tx_unlock_bh(dev); > - return 0; > -} > - > -static const struct seq_operations dev_mc_seq_ops = { > - .start = dev_mc_seq_start, > - .next = dev_mc_seq_next, > - .stop = dev_mc_seq_stop, > - .show = dev_mc_seq_show, > -}; > - > -static int dev_mc_seq_open(struct inode *inode, struct file *file) > -{ > - return seq_open(file, &dev_mc_seq_ops); > -} > - > -static const struct file_operations dev_mc_seq_fops = { > - .owner = THIS_MODULE, > - .open = dev_mc_seq_open, > - .read = seq_read, > - .llseek = seq_lseek, > - .release = seq_release, > -}; > - > -#endif > - > -void __init dev_mcast_init(void) > -{ > - proc_net_fops_create("dev_mcast", 0, &dev_mc_seq_fops); > -} > - > -EXPORT_SYMBOL(dev_mc_add); > -EXPORT_SYMBOL(dev_mc_delete); > -- > 1.5.2.2 Is there any more comments on this? > > -- Denis Cheng Linux Application Developer "One of my most productive days was throwing away 1000 lines of code." - Ken Thompson. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c 2007-07-20 1:51 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c rae l @ 2007-07-20 3:04 ` David Miller 2007-07-20 3:22 ` rae l 0 siblings, 1 reply; 18+ messages in thread From: David Miller @ 2007-07-20 3:04 UTC (permalink / raw) To: crquan; +Cc: netdev, kuznet, kaber, pekkas, jmorris, linux-kernel From: "rae l" <crquan@gmail.com> Date: Fri, 20 Jul 2007 09:51:05 +0800 > Is there any more comments on this? Please don't quote a big huge patch just to say one sentence that doesn't apply to any particular specific part of a patch. That's wastes bandwidth, annoys people you might actually want a response from, and is bad netiquette in general. ^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c 2007-07-20 3:04 ` David Miller @ 2007-07-20 3:22 ` rae l 0 siblings, 0 replies; 18+ messages in thread From: rae l @ 2007-07-20 3:22 UTC (permalink / raw) To: David Miller; +Cc: netdev, kuznet, kaber, pekkas, jmorris, linux-kernel On 7/20/07, David Miller <davem@davemloft.net> wrote: > Please don't quote a big huge patch just to say one sentence that > doesn't apply to any particular specific part of a patch. > > That's wastes bandwidth, annoys people you might actually want > a response from, and is bad netiquette in general. Thanks. > -- Denis Cheng Linux Application Developer "One of my most productive days was throwing away 1000 lines of code." - Ken Thompson. ^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2007-07-20 3:22 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <11846606051099-git-send-email-crquan@gmail.com>
2007-07-18 2:41 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c Denis Cheng
2007-07-18 2:41 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one Denis Cheng
2007-07-18 2:41 ` [PATCH 3/3] [net/core] move __dev_addr_discard adjacent to dev_addr_discard for readability Denis Cheng
2007-07-18 9:13 ` David Miller
2007-07-18 9:12 ` [PATCH 2/3] [net/core] merge dev_unicast_discard and dev_mc_discard into one David Miller
2007-07-18 9:11 ` [PATCH 1/3] [net/core] move dev_mc_discard from dev_mcast.c to dev.c David Miller
2007-07-18 9:59 ` rae l
2007-07-18 10:01 ` Patrick McHardy
2007-07-18 10:04 ` David Miller
2007-07-18 10:10 ` Patrick McHardy
2007-07-18 10:03 ` David Miller
2007-07-18 11:30 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c Denis Cheng
2007-07-18 11:30 ` [PATCH 2/2] net/core: some functions' definition order adjustment for readability Denis Cheng
2007-07-18 12:39 ` Patrick McHardy
2007-07-18 14:31 ` rae l
2007-07-20 1:51 ` [PATCH 1/2] net/core: merge the content of dev_mcast.c into dev.c rae l
2007-07-20 3:04 ` David Miller
2007-07-20 3:22 ` rae l
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).