Subject: Re: [PATCH net-next V7 07/14] devlink: Add parent dev to devlink API

From: Jakub Kicinski <[email-masked]>
Date: Mon, 2 Feb 2026 20:00:35 -0800

On Wed, 28 Jan 2026 13:25:37 +0200 Tariq Toukan wrote:
>  static int __devlink_nl_pre_doit(struct sk_buff *skb, struct genl_info *info,
>  				 u8 flags)
>  {
> +	bool parent_dev = flags & DEVLINK_NL_FLAG_OPTIONAL_PARENT_DEV;
>  	bool dev_lock = flags & DEVLINK_NL_FLAG_NEED_DEV_LOCK;
> +	struct devlink *devlink, *parent_devlink = NULL;
> +	struct net *net = genl_info_net(info);
> +	struct nlattr **attrs = info->attrs;
>  	struct devlink_port *devlink_port;
> -	struct devlink *devlink;
>  	int err;
>  
> -	devlink = devlink_get_from_attrs_lock(genl_info_net(info), info->attrs,
> -					      dev_lock);
> -	if (IS_ERR(devlink))
> -		return PTR_ERR(devlink);
> +	if (parent_dev && attrs[DEVLINK_ATTR_PARENT_DEV]) {
> +		parent_devlink = devlink_get_parent_from_attrs_lock(net, attrs);
> +		if (IS_ERR(parent_devlink))
> +			return PTR_ERR(parent_devlink);
> +		info->user_ptr[1] = parent_devlink;

Let's convert devlink to use proper overlay struct over info->cb ?
The user_ptr array only has two entries so devlink stuffs all the
extra pointers into the second slot. But the cb is much larger - 48B
so we can easily give each of these values a dedicated pointer.

> +		/* Drop the parent devlink lock but don't release the reference.
> +		 * This will keep it alive until the end of the request.
> +		 */

To be clear -- devlink instances do not behave like netdev instances.
netdev instances prevent unregistration of the netdev.
devlink refs are normal refs, they just keep the memory around.
If memory serves me..

> +		devl_unlock(parent_devlink);
> +	}
>  
> +	devlink = devlink_get_from_attrs_lock(net, attrs, dev_lock);
> +	if (IS_ERR(devlink)) {
> +		err = PTR_ERR(devlink);
> +		goto parent_put;
> +	}