From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Hannes Reinecke <hare@suse.de>,
Kay Sievers <kay.sievers@vrfy.org>,
SCSI development list <linux-scsi@vger.kernel.org>,
"Eric W. Biederman" <ebiederm@xmission.com>,
Andrew Morton <akpm@linux-foundation.org>,
Greg Kroah-Hartman <gregkh@suse.de>,
Kernel development list <linux-kernel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>,
Cornelia Huck <cornelia.huck@de.ibm.com>,
linux-fsdevel@vger.kernel.org,
"Eric W. Biederman" <ebiederm@aristanetworks.com>
Subject: Re: [PATCH 25/20] sysfs: Only support removing emtpy sysfs directories.
Date: Wed, 27 May 2009 21:42:30 +0000 [thread overview]
Message-ID: <1243460550.6067.82.camel@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0905271710040.2669-100000@iolanthe.rowland.org>
On Wed, 2009-05-27 at 17:31 -0400, Alan Stern wrote:
> On Wed, 27 May 2009, James Bottomley wrote:
>
> > > I can't tell whether you understood my point. After a scsi_device is
> > > unregistered but before it is released -- i.e., when its state is
> > > SDEV_DEL -- it _is_ essentially unusable. So why wait until it is
> > > released to decrement the target's device counter? Why not do the
> > > decrement in __scsi_remove_device()?
> >
> > because the use model of the device still requires a valid target. Even
> > though it gets gated in several places in SDEV_DEL, we still have use of
> > the target parent. This is fixable, but only by a long audit of all the
> > sdev uses plus the enforcement of no use of target in DEL state rule,
> > which adds complexity.
>
> You're failing to distinguish properly between "delete" and "release".
> A target (or device in general) is deleted when it is removed from
> visibility -- i.e., when device_del() is called. It is released when
> the final put_device() call occurs and the data structure is
> deallocated.
I find the terms delete and release too close for comfort, which is why
I've always been careful to say remove from visibility.
> So, all I'm saying is there's nothing wrong with deleting a target
> when all its children are deleted, provided the target isn't released
> until all the children are released. Below you say the same thing.
>
>
> > > > Perhaps I haven't made the problem clear enough. You only want early
> > > > del if the host is going away, otherwise the target might be reused and
> > > > it can't be if you've called del on it. So there needs to be an
> > > > integration into the host lifecycle in some form.
> > >
> > > Yes, granted. That integration doesn't have to be complicated.
> > > Basically, you just decrement the counters in all the targets when
> > > setting a host's state to SHOST_DEL or SHOST_DEL_RECOVERY. At that
> >
> > And SHOST_CANCEL and SHOST_CANCEL_RECOVERY.
>
> If you prefer. I thought SHOST_DEL would be more appropriate because
> it occurs after scsi_forget_host() is called. All those transitions
> occur in scsi_remove_host(), anyway.
I mean in all four states.
> > > point there's no reason to keep an unpopulated target around, right?
> >
> > If the child list were empty, sure. However, it's likely not going to
> > be at this point.
>
> Regardless, it will work either way.
>
> > > Up until that point, the counter's value should be one more than the
> > > number of underlying sdevs. So if the counter decrements to 0 then
> > > there were no underlying sdevs and the target is deleted immediately;
> > > otherwise it is deleted when the last remaining sdev is deleted.
> >
> > No, that's the problem. It can be removed from visibility if it has no
> > visible sdevs, but it can't be deleted until the last sdev is released.
>
> Allow me to rephrase this: A target can be removed from visibility if
> it has no visible sdevs, but it can't be _released_ until the last sdev
> is released.
>
> That's fine. You remove a target from visibility when target->reap_ref
> becomes 0. The target isn't released until the target's embedded
> struct device's refcount becomes 0. To make this work, simply have
> scsi_alloc_sdev() call
>
> get_device(&starget->dev);
>
> and have scsi_device_dev_release_usercontext() call
>
> put_device(&starget->dev);
>
> Doesn't that do exactly what you're asking for?
That's um what we do to day ... the addition has to be to the visibility
management.
James
next prev parent reply other threads:[~2009-05-27 21:42 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <ac3eb2510905260927we3c748akbbcaf3f3ac1da096@mail.gmail.com>
2009-05-26 19:29 ` [PATCH 25/20] sysfs: Only support removing emtpy sysfs directories Alan Stern
2009-05-26 21:09 ` James Bottomley
2009-05-26 21:13 ` Kay Sievers
2009-05-26 21:56 ` Alan Stern
2009-05-26 22:03 ` Kay Sievers
2009-05-26 23:49 ` James Bottomley
2009-05-27 0:02 ` Kay Sievers
2009-05-27 2:17 ` Alan Stern
2009-05-27 11:35 ` Hannes Reinecke
2009-05-27 16:01 ` James Bottomley
2009-05-27 16:16 ` Alan Stern
2009-05-27 16:24 ` James Bottomley
2009-05-27 17:01 ` Alan Stern
2009-05-27 17:08 ` James Bottomley
2009-05-27 18:07 ` Alan Stern
2009-05-27 19:44 ` James Bottomley
2009-05-27 20:40 ` Alan Stern
2009-05-27 20:49 ` James Bottomley
2009-05-27 21:31 ` Alan Stern
2009-05-27 21:42 ` James Bottomley [this message]
2009-05-27 22:15 ` Alan Stern
2009-05-27 22:22 ` James Bottomley
2009-05-28 15:24 ` Alan Stern
2009-05-28 15:45 ` Eric W. Biederman
2009-05-28 17:51 ` Alan Stern
2009-05-28 18:21 ` James Bottomley
2009-05-28 20:02 ` Alan Stern
2009-05-28 20:10 ` James Bottomley
2009-05-28 21:04 ` Alan Stern
2009-05-29 12:32 ` Hannes Reinecke
2009-05-29 20:08 ` Alan Stern
2009-05-27 18:00 ` Eric W. Biederman
2009-05-27 18:15 ` Alan Stern
2009-05-27 18:24 ` Eric W. Biederman
2009-05-27 21:38 ` Alan Stern
2009-05-27 22:06 ` Eric W. Biederman
2009-05-27 22:18 ` Alan Stern
2009-05-26 21:39 ` Alan Stern
[not found] <1243252896.4853.9.camel@poy>
2009-05-25 15:49 ` Alan Stern
2009-05-25 18:19 ` Kay Sievers
2009-05-25 20:14 ` Alan Stern
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=1243460550.6067.82.camel@localhost.localdomain \
--to=james.bottomley@hansenpartnership.com \
--cc=akpm@linux-foundation.org \
--cc=cornelia.huck@de.ibm.com \
--cc=ebiederm@aristanetworks.com \
--cc=ebiederm@xmission.com \
--cc=gregkh@suse.de \
--cc=hare@suse.de \
--cc=kay.sievers@vrfy.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=tj@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