| From stable-bounces@linux.kernel.org Tue Apr 18 21:21:06 2006 |
| Message-ID: <4445BB0F.6010305@ums.usu.ru> |
| Date: Wed, 19 Apr 2006 10:22:39 +0600 |
| From: "Alexander E. Patrakov" <patrakov@ums.usu.ru> |
| To: Greg KH <greg@kroah.com> |
| Cc: LKML <linux-kernel@vger.kernel.org>, stable@kernel.org |
| Subject: [NET]: Fix hotplug race during device registration |
| |
| From: Thomas de Grenier de Latour <degrenier@easyconnect.fr> |
| |
| On Sun, 9 Apr 2006 21:56:59 +0400, |
| Sergey Vlasov <vsu@altlinux.ru> wrote: |
| > However, show_address() does not output anything unless |
| > dev->reg_state == NETREG_REGISTERED - and this state is set by |
| > netdev_run_todo() only after netdev_register_sysfs() returns, so in |
| > the meantime (while netdev_register_sysfs() is busy adding the |
| > "statistics" attribute group) some process may see an empty "address" |
| > attribute. |
| |
| I've tried the attached patch, suggested by Sergey Vlasov on |
| hotplug-devel@, and as far as i can test it works just fine. |
| |
| Signed-off-by: Alexander Patrakov <patrakov@ums.usu.ru> |
| Signed-off-by: David Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| net/core/dev.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- linux-2.6.16.9.orig/net/core/dev.c |
| +++ linux-2.6.16.9/net/core/dev.c |
| @@ -2932,11 +2932,11 @@ void netdev_run_todo(void) |
| |
| switch(dev->reg_state) { |
| case NETREG_REGISTERING: |
| + dev->reg_state = NETREG_REGISTERED; |
| err = netdev_register_sysfs(dev); |
| if (err) |
| printk(KERN_ERR "%s: failed sysfs registration (%d)\n", |
| dev->name, err); |
| - dev->reg_state = NETREG_REGISTERED; |
| break; |
| |
| case NETREG_UNREGISTERING: |