Message ID | 20231013121029.353351-4-jiri@resnulli.us (mailing list archive) |
---|---|
State | Accepted |
Commit | a380687200e0f7f0e00d745796fd8b8ea4bcb746 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | devlink: fix a deadlock when taking devlink instance lock while holding RTNL lock | expand |
On Fri, Oct 13, 2023 at 02:10:25PM +0200, Jiri Pirko wrote: > From: Jiri Pirko <jiri@nvidia.com> > > In preparation to allow to access device pointer without devlink > instance lock held, make sure the device pointer is usable until > devlink_release() is called. > > Fixes: c137743bce02 ("devlink: introduce object and nested devlink relationship infra") > Signed-off-by: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Simon Horman <horms@kernel.org>
diff --git a/net/devlink/core.c b/net/devlink/core.c index bcbbb952569f..c47c9e6c744f 100644 --- a/net/devlink/core.c +++ b/net/devlink/core.c @@ -310,6 +310,7 @@ static void devlink_release(struct work_struct *work) mutex_destroy(&devlink->lock); lockdep_unregister_key(&devlink->lock_key); + put_device(devlink->dev); kfree(devlink); } @@ -425,7 +426,7 @@ struct devlink *devlink_alloc_ns(const struct devlink_ops *ops, if (ret < 0) goto err_xa_alloc; - devlink->dev = dev; + devlink->dev = get_device(dev); devlink->ops = ops; xa_init_flags(&devlink->ports, XA_FLAGS_ALLOC); xa_init_flags(&devlink->params, XA_FLAGS_ALLOC);