Re: [PATCH net-next V6 07/14] devlink: Add parent dev to devlink API
From: Cosmin Ratiu <hidden>
Date: 2026-01-27 14:25:54
Also in:
linux-doc, linux-rdma, lkml
On Tue, 2026-01-27 at 13:49 +0000, Simon Horman wrote:
quoted hunk ↗ jump to hunk
On Sun, Jan 25, 2026 at 01:31:56PM +0200, Tariq Toukan wrote:quoted
From: Cosmin Ratiu <redacted> Upcoming changes to the rate commands need the parent devlink specified. This change adds a nested 'parent-dev' attribute to the API and helpers to obtain and put a reference to the parent devlink instance in info->user_ptr[1]. To avoid deadlocks, the parent devlink is unlocked before obtaining the main devlink instance that is the target of the request. A reference to the parent is kept until the end of the request to avoid it suddenly disappearing. This means that this reference is of limited use without additional protection. Signed-off-by: Cosmin Ratiu <redacted> Reviewed-by: Carolina Jubran <redacted> Reviewed-by: Jiri Pirko <redacted> Signed-off-by: Tariq Toukan <tariqt@nvidia.com>... Hi Cosmin, all, The netlink_gen.[ch] and spec changes in this patch do not seem consistent. $ tools/net/ynl/ynl-regen.sh -f $ git diffdiff --git a/net/devlink/netlink_gen.c b/net/devlink/netlink_gen.c index 6b691bdbf037..f4c61c2b4f22 100644 --- a/net/devlink/netlink_gen.c +++ b/net/devlink/netlink_gen.c@@ -39,11 +39,6 @@ devlink_attr_param_type_validate(const structnlattr *attr, } /* Common nested types */ -const struct nla_policy devlink_dl_parent_dev_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = { - [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, }, - [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, }, -}; - const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 1] = { [DEVLINK_PORT_FUNCTION_ATTR_HW_ADDR] = { .type = NLA_BINARY, }, [DEVLINK_PORT_FN_ATTR_STATE] = NLA_POLICY_MAX(NLA_U8, 1),diff --git a/net/devlink/netlink_gen.h b/net/devlink/netlink_gen.h index d4db82a00522..2817d53a0eba 100644 --- a/net/devlink/netlink_gen.h +++ b/net/devlink/netlink_gen.h@@ -13,7 +13,6 @@#include <uapi/linux/devlink.h> /* Common nested types */ -extern const struct nla_policy devlink_dl_parent_dev_nl_policy[DEVLINK_ATTR_DEV_NAME + 1]; extern const struct nla_policy devlink_dl_port_function_nl_policy[DEVLINK_PORT_FN_ATTR_CAPS + 1]; extern const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_RATE_TC_ATTR_BW + 1]; extern const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1];@@ -30,19 +29,12 @@ int devlink_nl_pre_doit_dev_lock(const structgenl_split_ops *ops, int devlink_nl_pre_doit_port_optional(const struct genl_split_ops *ops, struct sk_buff *skb, struct genl_info *info); -int devlink_nl_pre_doit_parent_dev_optional(const struct genl_split_ops *ops, - struct sk_buff *skb, - struct genl_info *info); void devlink_nl_post_doit(const struct genl_split_ops *ops, struct sk_buff *skb, struct genl_info *info); void devlink_nl_post_doit_dev_lock(const struct genl_split_ops *ops, struct sk_buff *skb, struct genl_info *info); -void -devlink_nl_post_doit_parent_dev_optional(const struct genl_split_ops *ops, - struct sk_buff *skb, - struct genl_info *info); int devlink_nl_get_doit(struct sk_buff *skb, struct genl_info *info); int devlink_nl_get_dumpit(struct sk_buff *skb, struct netlink_callback *cb); ;
Hi Simon, We had this conversation during v4, I replied then [1]. But thinking about it a bit more, I think it's indeed slightly cleaner to move the policy and the new pre/post doit handlers to the next patch, where they are actually used. The only bit is that the policy is used from devlink_get_parent_from_attrs_lock from this function, but it appears safe to use NULL there until next patch (the underlying parse functions tolerate NULL policies). So I'll do that in the next submission. [1] https://lore.kernel.org/netdev/3ec956ea1d0a1c6e56865b2ded6d83ed773ccd4d.camel@nvidia.com/ (local)