netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] rtnetlink: rtnl_link_register always returns zero
@ 2011-12-13 20:31 alex.bluesman.smirnov
  2011-12-13 21:08 ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: alex.bluesman.smirnov @ 2011-12-13 20:31 UTC (permalink / raw)
  To: netdev; +Cc: davem, Alexander Smirnov

From: Alexander Smirnov <alexander@Lenovo.(none)>

Both functions 'rtnl_link_register' and '__rtnl_link_register' always
return zero. So handling return status has no sense in several drivers.

Signed-off-by: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
---
 drivers/net/bonding/bond_main.c |    6 +-----
 drivers/net/can/dev.c           |    8 +-------
 drivers/net/tun.c               |    8 ++------
 3 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 25a44d9..f79bb97 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4921,9 +4921,7 @@ static int __init bonding_init(void)
 	if (res)
 		goto out;
 
-	res = rtnl_link_register(&bond_link_ops);
-	if (res)
-		goto err_link;
+	rtnl_link_register(&bond_link_ops);
 
 	bond_create_debugfs();
 
@@ -4939,10 +4937,8 @@ out:
 	return res;
 err:
 	rtnl_link_unregister(&bond_link_ops);
-err_link:
 	unregister_pernet_subsys(&bond_net_ops);
 	goto out;
-
 }
 
 static void __exit bonding_exit(void)
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
index 120f1ab..e5b5daf 100644
--- a/drivers/net/can/dev.c
+++ b/drivers/net/can/dev.c
@@ -756,13 +756,7 @@ EXPORT_SYMBOL_GPL(unregister_candev);
 
 static __init int can_dev_init(void)
 {
-	int err;
-
-	err = rtnl_link_register(&can_link_ops);
-	if (!err)
-		printk(KERN_INFO MOD_DESC "\n");
-
-	return err;
+	return rtnl_link_register(&can_link_ops);
 }
 module_init(can_dev_init);
 
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 93c5d72..bb034b1 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -1632,16 +1632,12 @@ static const struct ethtool_ops tun_ethtool_ops = {
 
 static int __init tun_init(void)
 {
-	int ret = 0;
+	int ret;
 
 	pr_info("%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
 	pr_info("%s\n", DRV_COPYRIGHT);
 
-	ret = rtnl_link_register(&tun_link_ops);
-	if (ret) {
-		pr_err("Can't register link_ops\n");
-		goto err_linkops;
-	}
+	rtnl_link_register(&tun_link_ops);
 
 	ret = misc_register(&tun_miscdev);
 	if (ret) {
-- 
1.7.0.4

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] rtnetlink: rtnl_link_register always returns zero
  2011-12-13 20:31 [PATCH] rtnetlink: rtnl_link_register always returns zero alex.bluesman.smirnov
@ 2011-12-13 21:08 ` David Miller
  2011-12-13 21:38   ` [PATCH net-next] rtnetlink: rtnl_link_register() sanity test Eric Dumazet
  0 siblings, 1 reply; 4+ messages in thread
From: David Miller @ 2011-12-13 21:08 UTC (permalink / raw)
  To: alex.bluesman.smirnov; +Cc: netdev

From: alex.bluesman.smirnov@gmail.com
Date: Wed, 14 Dec 2011 00:31:21 +0400

> From: Alexander Smirnov <alexander@Lenovo.(none)>
> 
> Both functions 'rtnl_link_register' and '__rtnl_link_register' always
> return zero. So handling return status has no sense in several drivers.
> 
> Signed-off-by: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>

This is never acceptable.

As long as those routines do return a value we SHOULD NOT ignore
it.

If you ignore it, then if we do have to start returning an error
then all of these call sites have to be reverted back, which is
a waste of time.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net-next] rtnetlink: rtnl_link_register() sanity test
  2011-12-13 21:08 ` David Miller
@ 2011-12-13 21:38   ` Eric Dumazet
  2011-12-14  7:47     ` David Miller
  0 siblings, 1 reply; 4+ messages in thread
From: Eric Dumazet @ 2011-12-13 21:38 UTC (permalink / raw)
  To: David Miller; +Cc: alex.bluesman.smirnov, netdev

Before adding a struct rtnl_link_ops into link_ops list, check it doesnt
clash with a prior one.

Based on a previous patch from Alexander Smirnov

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
---
 net/core/rtnetlink.c |   25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 9083e82..dbf2dda 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -273,6 +273,17 @@ EXPORT_SYMBOL_GPL(rtnl_unregister_all);
 
 static LIST_HEAD(link_ops);
 
+static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)
+{
+	const struct rtnl_link_ops *ops;
+
+	list_for_each_entry(ops, &link_ops, list) {
+		if (!strcmp(ops->kind, kind))
+			return ops;
+	}
+	return NULL;
+}
+
 /**
  * __rtnl_link_register - Register rtnl_link_ops with rtnetlink.
  * @ops: struct rtnl_link_ops * to register
@@ -285,6 +296,9 @@ static LIST_HEAD(link_ops);
  */
 int __rtnl_link_register(struct rtnl_link_ops *ops)
 {
+	if (rtnl_link_ops_get(ops->kind))
+		return -EEXIST;
+
 	if (!ops->dellink)
 		ops->dellink = unregister_netdevice_queue;
 
@@ -351,17 +365,6 @@ void rtnl_link_unregister(struct rtnl_link_ops *ops)
 }
 EXPORT_SYMBOL_GPL(rtnl_link_unregister);
 
-static const struct rtnl_link_ops *rtnl_link_ops_get(const char *kind)
-{
-	const struct rtnl_link_ops *ops;
-
-	list_for_each_entry(ops, &link_ops, list) {
-		if (!strcmp(ops->kind, kind))
-			return ops;
-	}
-	return NULL;
-}
-
 static size_t rtnl_link_get_size(const struct net_device *dev)
 {
 	const struct rtnl_link_ops *ops = dev->rtnl_link_ops;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net-next] rtnetlink: rtnl_link_register() sanity test
  2011-12-13 21:38   ` [PATCH net-next] rtnetlink: rtnl_link_register() sanity test Eric Dumazet
@ 2011-12-14  7:47     ` David Miller
  0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2011-12-14  7:47 UTC (permalink / raw)
  To: eric.dumazet; +Cc: alex.bluesman.smirnov, netdev

From: Eric Dumazet <eric.dumazet@gmail.com>
Date: Tue, 13 Dec 2011 22:38:00 +0100

> Before adding a struct rtnl_link_ops into link_ops list, check it doesnt
> clash with a prior one.
> 
> Based on a previous patch from Alexander Smirnov
> 
> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
> CC: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>

Applied.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-12-14  7:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-13 20:31 [PATCH] rtnetlink: rtnl_link_register always returns zero alex.bluesman.smirnov
2011-12-13 21:08 ` David Miller
2011-12-13 21:38   ` [PATCH net-next] rtnetlink: rtnl_link_register() sanity test Eric Dumazet
2011-12-14  7:47     ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).