|
@@ -5561,6 +5561,9 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
|
|
|
|
|
|
if (adj) {
|
|
if (adj) {
|
|
adj->ref_nr += 1;
|
|
adj->ref_nr += 1;
|
|
|
|
+ pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d\n",
|
|
|
|
+ dev->name, adj_dev->name, adj->ref_nr);
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -5574,8 +5577,8 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
|
|
adj->private = private;
|
|
adj->private = private;
|
|
dev_hold(adj_dev);
|
|
dev_hold(adj_dev);
|
|
|
|
|
|
- pr_debug("dev_hold for %s, because of link added from %s to %s\n",
|
|
|
|
- adj_dev->name, dev->name, adj_dev->name);
|
|
|
|
|
|
+ pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d; dev_hold on %s\n",
|
|
|
|
+ dev->name, adj_dev->name, adj->ref_nr, adj_dev->name);
|
|
|
|
|
|
if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) {
|
|
if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) {
|
|
ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
|
|
ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
|
|
@@ -5614,17 +5617,22 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
|
|
{
|
|
{
|
|
struct netdev_adjacent *adj;
|
|
struct netdev_adjacent *adj;
|
|
|
|
|
|
|
|
+ pr_debug("Remove adjacency: dev %s adj_dev %s ref_nr %d\n",
|
|
|
|
+ dev->name, adj_dev->name, ref_nr);
|
|
|
|
+
|
|
adj = __netdev_find_adj(adj_dev, dev_list);
|
|
adj = __netdev_find_adj(adj_dev, dev_list);
|
|
|
|
|
|
if (!adj) {
|
|
if (!adj) {
|
|
- pr_err("tried to remove device %s from %s\n",
|
|
|
|
|
|
+ pr_err("Adjacency does not exist for device %s from %s\n",
|
|
dev->name, adj_dev->name);
|
|
dev->name, adj_dev->name);
|
|
- BUG();
|
|
|
|
|
|
+ WARN_ON(1);
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
|
|
if (adj->ref_nr > ref_nr) {
|
|
if (adj->ref_nr > ref_nr) {
|
|
- pr_debug("%s to %s ref_nr-%d = %d\n", dev->name, adj_dev->name,
|
|
|
|
- ref_nr, adj->ref_nr-ref_nr);
|
|
|
|
|
|
+ pr_debug("adjacency: %s to %s ref_nr - %d = %d\n",
|
|
|
|
+ dev->name, adj_dev->name, ref_nr,
|
|
|
|
+ adj->ref_nr - ref_nr);
|
|
adj->ref_nr -= ref_nr;
|
|
adj->ref_nr -= ref_nr;
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -5636,7 +5644,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
|
|
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
|
|
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list);
|
|
|
|
|
|
list_del_rcu(&adj->list);
|
|
list_del_rcu(&adj->list);
|
|
- pr_debug("dev_put for %s, because link removed from %s to %s\n",
|
|
|
|
|
|
+ pr_debug("adjacency: dev_put for %s, because link removed from %s to %s\n",
|
|
adj_dev->name, dev->name, adj_dev->name);
|
|
adj_dev->name, dev->name, adj_dev->name);
|
|
dev_put(adj_dev);
|
|
dev_put(adj_dev);
|
|
kfree_rcu(adj, rcu);
|
|
kfree_rcu(adj, rcu);
|