devlink: remove linecard reference counting
authorJiri Pirko <jiri@nvidia.com>
Wed, 18 Jan 2023 15:21:05 +0000 (16:21 +0100)
committerJakub Kicinski <kuba@kernel.org>
Fri, 20 Jan 2023 03:08:37 +0000 (19:08 -0800)
As long as the linecard life time is protected by devlink instance
lock, the reference counting is no longer needed. Remove it.

Signed-off-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/devlink/devl_internal.h
net/devlink/leftover.c
net/devlink/netlink.c

index 32f0adc40c181dcdca3746575fdd4350e34c72c4..dd4e2c37cf0776c3ec7d4b9ff0bf2512eff38327 100644 (file)
@@ -193,7 +193,6 @@ struct devlink_linecard;
 
 struct devlink_linecard *
 devlink_linecard_get_from_info(struct devlink *devlink, struct genl_info *info);
-void devlink_linecard_put(struct devlink_linecard *linecard);
 
 /* Rates */
 extern const struct devlink_gen_cmd devl_gen_rate_get;
index 44f308d456978741e1773de6f3fa9409dcf850fa..f029e1bc68f60fe333ec29eeb9301a7d2c800c88 100644 (file)
@@ -37,7 +37,6 @@ struct devlink_linecard {
        struct list_head list;
        struct devlink *devlink;
        unsigned int index;
-       refcount_t refcount;
        const struct devlink_linecard_ops *ops;
        void *priv;
        enum devlink_linecard_state state;
@@ -285,7 +284,6 @@ devlink_linecard_get_from_attrs(struct devlink *devlink, struct nlattr **attrs)
                linecard = devlink_linecard_get_by_index(devlink, linecard_index);
                if (!linecard)
                        return ERR_PTR(-ENODEV);
-               refcount_inc(&linecard->refcount);
                return linecard;
        }
        return ERR_PTR(-EINVAL);
@@ -297,14 +295,6 @@ devlink_linecard_get_from_info(struct devlink *devlink, struct genl_info *info)
        return devlink_linecard_get_from_attrs(devlink, info->attrs);
 }
 
-void devlink_linecard_put(struct devlink_linecard *linecard)
-{
-       if (refcount_dec_and_test(&linecard->refcount)) {
-               mutex_destroy(&linecard->state_lock);
-               kfree(linecard);
-       }
-}
-
 struct devlink_sb {
        struct list_head list;
        unsigned int index;
@@ -10265,7 +10255,6 @@ devl_linecard_create(struct devlink *devlink, unsigned int linecard_index,
        }
 
        list_add_tail(&linecard->list, &devlink->linecard_list);
-       refcount_set(&linecard->refcount, 1);
        devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW);
        return linecard;
 }
@@ -10281,7 +10270,8 @@ void devl_linecard_destroy(struct devlink_linecard *linecard)
        devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_DEL);
        list_del(&linecard->list);
        devlink_linecard_types_fini(linecard);
-       devlink_linecard_put(linecard);
+       mutex_destroy(&linecard->state_lock);
+       kfree(linecard);
 }
 EXPORT_SYMBOL_GPL(devl_linecard_destroy);
 
index b5b8ac6db2d1feb934414f342f04cf4b30cadc16..3f2ab4360f115d7cf4b5e96d56e869924f42128b 100644 (file)
@@ -170,14 +170,9 @@ unlock:
 static void devlink_nl_post_doit(const struct genl_split_ops *ops,
                                 struct sk_buff *skb, struct genl_info *info)
 {
-       struct devlink_linecard *linecard;
        struct devlink *devlink;
 
        devlink = info->user_ptr[0];
-       if (ops->internal_flags & DEVLINK_NL_FLAG_NEED_LINECARD) {
-               linecard = info->user_ptr[1];
-               devlink_linecard_put(linecard);
-       }
        devl_unlock(devlink);
        devlink_put(devlink);
 }