diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2015-09-24 20:36:33 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-09-24 23:04:53 -0700 |
commit | 9861f72074c77a8a065622c1be7e9c4277e600eb (patch) | |
tree | cba58d3959606f2f4d7dd5ea95f8a79ac73fd2ad /net/core/net-sysfs.c | |
parent | 38737e490d4ea91660d3cec83ef88c4e6d360ae4 (diff) | |
download | lwn-9861f72074c77a8a065622c1be7e9c4277e600eb.tar.gz lwn-9861f72074c77a8a065622c1be7e9c4277e600eb.zip |
net: fix net_device refcounting
of_find_net_device_by_node() uses class_find_device() internally to
lookup the corresponding network device. class_find_device() returns
a reference to the embedded struct device, with its refcount
incremented.
Add a comment to the definition in net/core/net-sysfs.c indicating the
need to drop this refcount, and fix the DSA code to drop this refcount
when the OF-generated platform data is cleaned up and freed. Also
arrange for the ref to be dropped when handling errors.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/net-sysfs.c')
-rw-r--r-- | net/core/net-sysfs.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index b279077c3089..805a95a48107 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -1481,6 +1481,15 @@ static int of_dev_node_match(struct device *dev, const void *data) return ret == 0 ? dev->of_node == data : ret; } +/* + * of_find_net_device_by_node - lookup the net device for the device node + * @np: OF device node + * + * Looks up the net_device structure corresponding with the device node. + * If successful, returns a pointer to the net_device with the embedded + * struct device refcount incremented by one, or NULL on failure. The + * refcount must be dropped when done with the net_device. + */ struct net_device *of_find_net_device_by_node(struct device_node *np) { struct device *dev; |