Linux SCSI subsystem development
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Tzung-Bi Shih <tzungbi@kernel.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Greg KH <gregkh@linuxfoundation.org>
Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] scsi: core: Don't free dev_name() manually
Date: Sun, 18 Jan 2026 09:45:26 -0500	[thread overview]
Message-ID: <de7b19fe19ccb117cad8cd32d9c51796ee81b752.camel@HansenPartnership.com> (raw)
In-Reply-To: <20260117193221.152540-1-tzungbi@kernel.org>

On Sun, 2026-01-18 at 03:32 +0800, Tzung-Bi Shih wrote:
> > scsi_host_alloc() is designed to hold initial reference count of
> > `&shost->shost_gendev` and `&shost->shost_dev`.  In the error
> > handling paths [1], only drop a reference count to `&shost-
> > >shost_gendev` is sufficient as scsi_host_dev_release() will be
> > called and the reference count of `&shost->shost_dev` should be
> > dropped at that time.
> > 
> > Drivers shouldn't need to free the device name and hold a reference
> > count to its parent device as the driver core automatically handles
> > that.  Remove them.
> > 
> > [1] Either at "fail" label in scsi_host_alloc() or in SCSI drivers
> > that
> >     a subsequent scsi_add_host{,_with_dma}() fails.

This commit description seems to bear almost no relation to what's
going on in the commit ... please describe why you're doing what you're
doing (like eliminating the class based device get and the parent get
and, apparently, trying to flatten the device tree in the host).

> > 
> > Fixes: b49493f99690 ("Fix a memory leak in
> > scsi_host_dev_release()")
> > Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>
> > ---
> >  drivers/scsi/hosts.c | 16 +++++-----------
> >  1 file changed, 5 insertions(+), 11 deletions(-)
> > 
> > diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
> > index 1b3fbd328277..b88d553cdde6 100644
> > --- a/drivers/scsi/hosts.c
> > +++ b/drivers/scsi/hosts.c
> > @@ -55,7 +55,6 @@ static DEFINE_IDA(host_index_ida);
> >  
> >  static void scsi_host_cls_release(struct device *dev)
> >  {
> > - put_device(&class_to_shost(dev)->shost_gendev);
> >  }

An empty release function can simply become a NULL pointer.  I assume
the reason this one doesn't is because the device core will complain if
a device has no release function ... in which case a comment why we
don't need one should be here.

But there's a reason for the warning: a bigger problem with this is the
parenting goes

shost_dev -> shost_gendev -> underlying device

And shost_dev is visible in the sysfs tree so it could possibly by held
in place by user space.  If that happens, since you've now removed the
reference it took on shost_gendev, what stops shost_gendev (and the
rest of the host) being freed?

> >  
> >  static struct class shost_class = {
> > @@ -279,11 +278,9 @@ int scsi_add_host_with_dma(struct Scsi_Host
> > *shost, struct device *dev,
> >   goto out_disable_runtime_pm;
> >  
> >   scsi_host_set_state(shost, SHOST_RUNNING);
> > - get_device(shost->shost_gendev.parent);

We need a reference to the parent to prevent surprise removal ... where
else is the reference held?

> >  
> >   device_enable_async_suspend(&shost->shost_dev);
> >  
> > - get_device(&shost->shost_gendev);

I assume this is matched to the class dev_release which is gone?  If
so, say in the commit message.



  reply	other threads:[~2026-01-18 14:45 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-17 19:32 [PATCH] scsi: core: Don't free dev_name() manually Tzung-Bi Shih
2026-01-18 14:45 ` James Bottomley [this message]
2026-01-19 14:28   ` Tzung-Bi Shih
2026-01-19 16:02     ` James Bottomley
2026-01-20 13:11       ` Tzung-Bi Shih
2026-01-20 14:26         ` James Bottomley

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=de7b19fe19ccb117cad8cd32d9c51796ee81b752.camel@HansenPartnership.com \
    --to=james.bottomley@hansenpartnership.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=tzungbi@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox