From: Dan Carpenter <dan.carpenter@oracle.com>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: kbusch@kernel.org, linux-kernel@vger.kernel.org,
kernel-janitors@vger.kernel.org
Subject: Re: [bug report] node: Add memory-side caching attributes
Date: Thu, 1 Apr 2021 17:06:52 +0300 [thread overview]
Message-ID: <20210401140652.GT2088@kadam> (raw)
In-Reply-To: <20210401112511.GV1463678@nvidia.com>
On Thu, Apr 01, 2021 at 08:25:11AM -0300, Jason Gunthorpe wrote:
> On Thu, Apr 01, 2021 at 12:00:39PM +0300, Dan Carpenter wrote:
> > Hi Keith,
> >
> > I've been trying to figure out ways Smatch can check for device managed
> > resources. Like adding rules that if we call dev_set_name(&foo->bar)
> > then it's device managaged and if there is a kfree(foo) without calling
> > device_put(&foo->bar) then that's a resource leak.
>
> It seems to be working from what I can see
This check is actually more simple, and older. It just looks for
device_register(dev);
...
kfree(dev);
I've written your proposed check of:
device_register(&foo->dev);
...
kfree(foo); // warning missing device_put(&foo->dev);
But I just did that earler today and it will probably take a couple
iterations to work out the kinks. Plus I'm off for a small vacation so
it will be a week before I have the results from that.
>
> Also I wasn't able to convince myself that any locking around
> node->cache_attrs exist..
>
> > Of course one of the rules is that if you call device_register(dev) then
> > you can't kfree(dev), it has to released with device_put(dev) and that's
> > true even if the register fails. But this code here feels very
> > intentional so maybe there is an exception to the rule?
>
> There is no exception. Open coding this:
>
> > 282 free_name:
> > 283 kfree_const(dev->kobj.name);
>
> To avoid leaking memory from dev_set_name is a straight up layering
> violation, WTF?
>
> node_cacheinfo_release() is just kfree(), so there is no need.
> Instead (please feel free to send this Dan):
Sure, I can send this (tomorrow).
>
> diff --git a/drivers/base/node.c b/drivers/base/node.c
> index f449dbb2c74666..89c28952863977 100644
> --- a/drivers/base/node.c
> +++ b/drivers/base/node.c
> @@ -319,25 +319,24 @@ void node_add_cache(unsigned int nid, struct node_cache_attrs *cache_attrs)
> return;
>
> dev = &info->dev;
> + device_initialize(dev)
> dev->parent = node->cache_dev;
> dev->release = node_cacheinfo_release;
> dev->groups = cache_groups;
> if (dev_set_name(dev, "index%d", cache_attrs->level))
Is calling dev_set_name() without doing a device_initialize() a bug? I
could write a check for that.
regards,
dan carpenter
next prev parent reply other threads:[~2021-04-01 18:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-01 9:00 [bug report] node: Add memory-side caching attributes Dan Carpenter
2021-04-01 11:25 ` Jason Gunthorpe
2021-04-01 14:06 ` Dan Carpenter [this message]
2021-04-01 15:22 ` Jason Gunthorpe
2021-04-01 21:27 ` Keith Busch
-- strict thread matches above, loose matches on Subject: below --
2020-02-05 5:11 Dan Carpenter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210401140652.GT2088@kadam \
--to=dan.carpenter@oracle.com \
--cc=jgg@nvidia.com \
--cc=kbusch@kernel.org \
--cc=kernel-janitors@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.