diff mbox series

[net-next,v2,3/6] net/x25: replace x25_kill_by_device with x25_kill_by_neigh

Message ID 20201116135522.21791-4-ms@dev.tdt.de
State Superseded
Headers show
Series netdev event handling + neighbour config | expand

Commit Message

Martin Schiller Nov. 16, 2020, 1:55 p.m. UTC
Remove unnecessary function x25_kill_by_device.

Signed-off-by: Martin Schiller <ms@dev.tdt.de>
---

Change from v1:
fix 'subject_prefix' warning

---
 net/x25/af_x25.c | 22 +++++-----------------
 1 file changed, 5 insertions(+), 17 deletions(-)

Comments

Xie He Nov. 17, 2020, 7:50 p.m. UTC | #1
On Mon, Nov 16, 2020 at 6:00 AM Martin Schiller <ms@dev.tdt.de> wrote:
>

> Remove unnecessary function x25_kill_by_device.


> -/*

> - *     Kill all bound sockets on a dropped device.

> - */

> -static void x25_kill_by_device(struct net_device *dev)

> -{

> -       struct sock *s;

> -

> -       write_lock_bh(&x25_list_lock);

> -

> -       sk_for_each(s, &x25_list)

> -               if (x25_sk(s)->neighbour && x25_sk(s)->neighbour->dev == dev)

> -                       x25_disconnect(s, ENETUNREACH, 0, 0);

> -

> -       write_unlock_bh(&x25_list_lock);

> -}

> -

>  /*

>   *     Handle device status changes.

>   */

> @@ -273,7 +257,11 @@ static int x25_device_event(struct notifier_block *this, unsigned long event,

>                 case NETDEV_DOWN:

>                         pr_debug("X.25: got event NETDEV_DOWN for device: %s\n",

>                                  dev->name);

> -                       x25_kill_by_device(dev);

> +                       nb = x25_get_neigh(dev);

> +                       if (nb) {

> +                               x25_kill_by_neigh(nb);

> +                               x25_neigh_put(nb);

> +                       }

>                         x25_route_device_down(dev);

>                         x25_link_device_down(dev);

>                         break;


This patch might not be entirely necessary. x25_kill_by_neigh and
x25_kill_by_device are just two helper functions. One function takes
nb as the argument and the other one takes dev as the argument. But
they do almost the same things. It doesn't harm to keep both. In C++
we often have different functions with the same name doing almost the
same things.

The original code also seems to be a little more efficient than the new code.
Martin Schiller Nov. 18, 2020, 8:28 a.m. UTC | #2
On 2020-11-17 20:50, Xie He wrote:
> On Mon, Nov 16, 2020 at 6:00 AM Martin Schiller <ms@dev.tdt.de> wrote:

>> 

>> Remove unnecessary function x25_kill_by_device.

> 

>> -/*

>> - *     Kill all bound sockets on a dropped device.

>> - */

>> -static void x25_kill_by_device(struct net_device *dev)

>> -{

>> -       struct sock *s;

>> -

>> -       write_lock_bh(&x25_list_lock);

>> -

>> -       sk_for_each(s, &x25_list)

>> -               if (x25_sk(s)->neighbour && x25_sk(s)->neighbour->dev 

>> == dev)

>> -                       x25_disconnect(s, ENETUNREACH, 0, 0);

>> -

>> -       write_unlock_bh(&x25_list_lock);

>> -}

>> -

>>  /*

>>   *     Handle device status changes.

>>   */

>> @@ -273,7 +257,11 @@ static int x25_device_event(struct notifier_block 

>> *this, unsigned long event,

>>                 case NETDEV_DOWN:

>>                         pr_debug("X.25: got event NETDEV_DOWN for 

>> device: %s\n",

>>                                  dev->name);

>> -                       x25_kill_by_device(dev);

>> +                       nb = x25_get_neigh(dev);

>> +                       if (nb) {

>> +                               x25_kill_by_neigh(nb);

>> +                               x25_neigh_put(nb);

>> +                       }

>>                         x25_route_device_down(dev);

>>                         x25_link_device_down(dev);

>>                         break;

> 

> This patch might not be entirely necessary. x25_kill_by_neigh and

> x25_kill_by_device are just two helper functions. One function takes

> nb as the argument and the other one takes dev as the argument. But

> they do almost the same things. It doesn't harm to keep both. In C++

> we often have different functions with the same name doing almost the

> same things.

> 


Well I don't like to have 2 functions doing the same thing.
But after another look at this code, I've found that I also need to
remove the call to x25_clear_forward_by_dev() in the function
x25_route_device_down(). Otherwise, it will be called twice.

> The original code also seems to be a little more efficient than the new 

> code.


The only difference would be the x25_get_neigh() and x25_neigh_put()
calls. That shouldn't cost to much.
diff mbox series

Patch

diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
index 4c2a395fdbdb..25726120fcc7 100644
--- a/net/x25/af_x25.c
+++ b/net/x25/af_x25.c
@@ -212,22 +212,6 @@  static void x25_remove_socket(struct sock *sk)
 	write_unlock_bh(&x25_list_lock);
 }
 
-/*
- *	Kill all bound sockets on a dropped device.
- */
-static void x25_kill_by_device(struct net_device *dev)
-{
-	struct sock *s;
-
-	write_lock_bh(&x25_list_lock);
-
-	sk_for_each(s, &x25_list)
-		if (x25_sk(s)->neighbour && x25_sk(s)->neighbour->dev == dev)
-			x25_disconnect(s, ENETUNREACH, 0, 0);
-
-	write_unlock_bh(&x25_list_lock);
-}
-
 /*
  *	Handle device status changes.
  */
@@ -273,7 +257,11 @@  static int x25_device_event(struct notifier_block *this, unsigned long event,
 		case NETDEV_DOWN:
 			pr_debug("X.25: got event NETDEV_DOWN for device: %s\n",
 				 dev->name);
-			x25_kill_by_device(dev);
+			nb = x25_get_neigh(dev);
+			if (nb) {
+				x25_kill_by_neigh(nb);
+				x25_neigh_put(nb);
+			}
 			x25_route_device_down(dev);
 			x25_link_device_down(dev);
 			break;