lkml.org 
[lkml]   [2021]   [Nov]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH net-next 5/6] devlink: Reshuffle resource registration logic
On Wed, Nov 17, 2021 at 08:49:56PM -0800, Jakub Kicinski wrote:
> On Wed, 17 Nov 2021 20:26:21 +0200 Leon Romanovsky wrote:
> > - top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP;
> > -
> > - mutex_lock(&devlink->lock);
> > - resource = devlink_resource_find(devlink, NULL, resource_id);
> > - if (resource) {
> > - err = -EINVAL;
> > - goto out;
> > - }
> > + WARN_ON(devlink_resource_find(devlink, NULL, resource_id));
>
> This is not atomic with the add now.

And it shouldn't. devlink_resource_find() will return valid resource only
if there driver is completely bogus with races or incorrect allocations of
resource_id.

devlink_*_register(..)
mutex_lock(&devlink->lock);
if (devlink_*_find(...)) {
mutex_unlock(&devlink->lock);
return ....;
}
.....

It is almost always wrong from locking and layering perspective the pattern above,
as it is racy by definition if not protected by top layer.

There are exceptions from the rule above, but devlink is clearly not the
one of such exceptions.

Thanks

\
 
 \ /
  Last update: 2021-11-18 08:52    [W:0.079 / U:0.540 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site