From: Greg KH <gregkh@linuxfoundation.org>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: rafael@kernel.org, jeyu@kernel.org, ngupta@vflare.org,
sergey.senozhatsky.work@gmail.com, minchan@kernel.org,
axboe@kernel.dk, mbenes@suse.com, jpoimboe@redhat.com,
tglx@linutronix.de, keescook@chromium.org, jikos@kernel.org,
rostedt@goodmis.org, peterz@infradead.org,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] drivers/base/core: refcount kobject and bus on device attribute read / store
Date: Wed, 23 Jun 2021 18:28:05 +0200 [thread overview]
Message-ID: <YNNhFdw++Auk+1Wg@kroah.com> (raw)
In-Reply-To: <20210623161434.qraapo4xaprte7bs@garbanzo>
On Wed, Jun 23, 2021 at 09:14:34AM -0700, Luis Chamberlain wrote:
> On Wed, Jun 23, 2021 at 10:32:53AM +0200, Greg KH wrote:
> > On Tue, Jun 22, 2021 at 05:36:30PM -0700, Luis Chamberlain wrote:
> > > diff --git a/drivers/base/core.c b/drivers/base/core.c
> > > index 4a8bf8cda52b..f69aa040b56d 100644
> > > --- a/drivers/base/core.c
> > > +++ b/drivers/base/core.c
> > > @@ -2042,28 +2042,56 @@ EXPORT_SYMBOL(dev_driver_string);
> > > static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
> > > char *buf)
> > > {
> > > - struct device_attribute *dev_attr = to_dev_attr(attr);
> > > - struct device *dev = kobj_to_dev(kobj);
> > > + struct device_attribute *dev_attr;
> > > + struct device *dev;
> > > + struct bus_type *bus = NULL;
> > > ssize_t ret = -EIO;
> > >
> > > + dev = get_device(kobj_to_dev(kobj));
> > > + if (dev->bus) {
> >
> > No need to test for this, right?
>
> dev_uevent() checks for dev->bus, so I thought that was a clear
> indication this isn't always set.
>
> >
> > > + bus = bus_get(dev->bus);
> > > + if (!bus)
> > > + goto out;
The point is that even if dev->bus is NULL, then bus_get(NULL) is NULL.
That's the only way that bus_get() can return NULL, which means this
check too is not needed.
> > > if (dev_attr->show)
> > > ret = dev_attr->show(dev, dev_attr, buf);
> > > if (ret >= (ssize_t)PAGE_SIZE) {
> > > printk("dev_attr_show: %pS returned bad count\n",
> > > dev_attr->show);
> > > }
> > > +
> > > + bus_put(bus);
> >
> > You are incrementing the bus, which is nice, but I do not understand why
> > it is needed. What is causing the bus to go away _before_ the devices
> > are going away? Busses almost never are removed from the system, and if
> > they are, all devices associated with them are removed first. So I do
> > not think you need to increment anything with that here.
>
> You tell me. It was your suggestion as a replacement for the type
> specific lock, in the zram case, its a block device so I was using
> bdgrab().
I did? Sorry, I do not remember, but this is not a lock, nor does it
protect anything.
I'll respond to the rest later...
greg k-h
next prev parent reply other threads:[~2021-06-23 16:28 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-23 0:36 [PATCH v3] drivers/base/core: refcount kobject and bus on device attribute read / store Luis Chamberlain
2021-06-23 8:32 ` Greg KH
2021-06-23 16:14 ` Luis Chamberlain
2021-06-23 16:28 ` Greg KH [this message]
2021-06-23 16:51 ` Greg KH
2021-06-23 17:23 ` Luis Chamberlain
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=YNNhFdw++Auk+1Wg@kroah.com \
--to=gregkh@linuxfoundation.org \
--cc=axboe@kernel.dk \
--cc=jeyu@kernel.org \
--cc=jikos@kernel.org \
--cc=jpoimboe@redhat.com \
--cc=keescook@chromium.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbenes@suse.com \
--cc=mcgrof@kernel.org \
--cc=minchan@kernel.org \
--cc=ngupta@vflare.org \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=rostedt@goodmis.org \
--cc=sergey.senozhatsky.work@gmail.com \
--cc=tglx@linutronix.de \
/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.