net: sock_bindtodevice() RCU-ification
Subsystems (3)
PATCH 1/1 net: sock_bindtodevice() RCU-ification
Avoid dev_hold()/dev_put() in sock_bindtodevice()
--- net/core/sock.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
net/core/sock.c +6 -4
@@ -420,14 +420,16 @@ static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen)if (devname[0 ] =='\0' ) { index =0 ; }else { -struct net_device *dev =dev_get_by_name (net, devname); +struct net_device *dev; +rcu_read_lock (); + dev =dev_get_by_name_rcu (net, devname); +if (dev) + index = dev->ifindex; +rcu_read_unlock (); ret = -ENODEV ;if (!dev) goto out; - - index = dev->ifindex; -dev_put (dev); }lock_sock (sk);
From: Eric Dumazet <[email protected]>
Date: Wed, 04 Nov 2009 23:36:44 +0100
Quoted 3 lines
Avoid dev_hold()/dev_put() in
sock_bindtodevice()Signed-off-by Eric Dumazet <[email protected]>
Applied to net-next-2.6, thanks.
David Miller
maintainerFrom: David Miller <[email protected]>
Date: Thu, 05 Nov 2009 21:08:30 -0800 (PST)
Quoted 8 lines
From: Eric Dumazet <[email protected]>
Date: Wed, 04 Nov 2009 23:36:44 +0100Quoted 3 lines
Avoid dev_hold()/dev_put() in
sock_bindtodevice()Signed-off-by Eric Dumazet <[email protected]>Applied to net-next-2.6, thanks.
Eric I had to add the following patch to cure a build warning after this, just FYI:
net: Fix build warning in sock_bindtodevice().
net/core/sock.c: In function 'sock_setsockopt':net/core/sock.c:396: warning: 'index' may be used uninitialized in this function net/core/sock.c:396: note: 'index' was declared here
GCC can't see that all paths initialize index, so just set it to the default (0) and eliminate the specific code block that handles the null device name string.
--- net/core/sock.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
net/core/sock.c +2 -3
@@ -417,9 +417,8 @@ static int sock_bindtodevice(struct sock *sk, char __user *optval, int optlen)if (copy_from_user (devname, optval, optlen)) goto out; -if (devname[0 ] =='\0' ) { - index =0 ; - }else { + index =0 ; +if (devname[0 ] !='\0' ) {struct net_device *dev;rcu_read_lock ();
Signature · 1 line
1.6.5.2
Quoted 16 lines · David Miller
From: David Miller <[email protected]>
Date: Thu, 05 Nov 2009 21:08:30 -0800 (PST)Quoted 7 lines
From: Eric Dumazet <[email protected]>
Date: Wed, 04 Nov 2009 23:36:44 +0100Quoted 3 lines
Avoid dev_hold()/dev_put() in
sock_bindtodevice()Signed-off-by Eric Dumazet <[email protected]>Applied to net-next-2.6, thanks.
Eric I had to add the following patch to cure a build warning after this, just FYI:
net: Fix build warning in
sock_bindtodevice().
Quoted 8 lines
net/core/sock.c: In function 'sock_setsockopt':net/core/sock.c:396: warning: 'index' may be used uninitialized in this functionnet/core/sock.c:396: note: 'index' was declared hereGCC can't see that all paths initialize index, so just set it to the default (0) and eliminate the specific code block that handles the null device name string.
Thanks David, which gcc version are you using ?
David Miller
maintainerFrom: Eric Dumazet <[email protected]>
Date: Fri, 06 Nov 2009 08:08:59 +0100
Quoted 1 line
Thanks David, which gcc version are you using ?
I'm using "gcc-4.2.4 (Ubuntu 4.2.4-1ubuntu3)" on sparc.