OSDN Git Service

net: failover: add net device refcount tracker
authorEric Dumazet <edumazet@google.com>
Sun, 5 Dec 2021 04:22:15 +0000 (20:22 -0800)
committerJakub Kicinski <kuba@kernel.org>
Tue, 7 Dec 2021 00:06:02 +0000 (16:06 -0800)
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/failover.h
net/core/failover.c

index bb15438..f2b42b4 100644 (file)
@@ -25,6 +25,7 @@ struct failover_ops {
 struct failover {
        struct list_head list;
        struct net_device __rcu *failover_dev;
+       netdevice_tracker       dev_tracker;
        struct failover_ops __rcu *ops;
 };
 
index b5cd3c7..dcaa92a 100644 (file)
@@ -252,7 +252,7 @@ struct failover *failover_register(struct net_device *dev,
                return ERR_PTR(-ENOMEM);
 
        rcu_assign_pointer(failover->ops, ops);
-       dev_hold(dev);
+       dev_hold_track(dev, &failover->dev_tracker, GFP_KERNEL);
        dev->priv_flags |= IFF_FAILOVER;
        rcu_assign_pointer(failover->failover_dev, dev);
 
@@ -285,7 +285,7 @@ void failover_unregister(struct failover *failover)
                    failover_dev->name);
 
        failover_dev->priv_flags &= ~IFF_FAILOVER;
-       dev_put(failover_dev);
+       dev_put_track(failover_dev, &failover->dev_tracker);
 
        spin_lock(&failover_lock);
        list_del(&failover->list);