Skip to content

Commit

Permalink
net: dev: Improve debug statements for adjacency tracking
Browse files Browse the repository at this point in the history
Adjacency code only has debugs for the insert case. Add debugs for
the remove path and make both consistently worded to make it easier
to follow the insert and removal with reference counts.

In addition, change the BUG to a WARN_ON. A missing adjacency at
removal time is not cause for a panic.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David Ahern authored and David S. Miller committed Oct 18, 2016
1 parent 0f524a8 commit 67b62f9
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -5561,6 +5561,9 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,

if (adj) {
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;
}

Expand All @@ -5574,8 +5577,8 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev,
adj->private = private;
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)) {
ret = netdev_adjacent_sysfs_add(dev, adj_dev, dev_list);
Expand Down Expand Up @@ -5614,17 +5617,22 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
{
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);

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);
BUG();
WARN_ON(1);
return;
}

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;
return;
}
Expand All @@ -5636,7 +5644,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev,
netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_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);
dev_put(adj_dev);
kfree_rcu(adj, rcu);
Expand Down

0 comments on commit 67b62f9

Please sign in to comment.