linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Wilcox <matthew@wil.cx>
To: Stefan Richter <stefanr@s5r6.in-berlin.de>
Cc: linux-scsi@vger.kernel.org
Subject: Re: Asynchronous scsi scanning, version 9
Date: Mon, 29 May 2006 07:05:15 -0600	[thread overview]
Message-ID: <20060529130515.GE23405@parisc-linux.org> (raw)
In-Reply-To: <447AB2F5.2000700@s5r6.in-berlin.de>

On Mon, May 29, 2006 at 10:38:13AM +0200, Stefan Richter wrote:
> Matthew Wilcox wrote:
> > Add the scsi_mod.scan kernel parameter to determine how scsi busses
> > are scanned.  "sync" is the current behaviour.  "none" punts scanning
> > scsi busses to userspace.  "async" is the new default.
> 
> This parameter is only relevant with LLDDs which use scsi_scan_host, right?

Not entirely.  If you set it to "none", scsi_scan_target() also returns
without doing anything.  If you use the scsi_prep_async_scan() and
scsi_finish_async_scan() API, you can also use this infrastructure to
make scanning sbp2 synchronised with other scsi hosts.  Then the setting
of sync vs async also triggers old vs new behaviour.

> Furthermore, "sync|async" basically means "serialized|parallelized
> across host adapters". Does it also mean "finishing before|after driver
> initialization"? (With LLDDs which use scsi_scan_host.)

That's what scsi_complete_async_scans() is for.  If you have a built-in
module, it will wait for the async scans to finish before we get as far
as trying to mount root.  It does change observable behaviour in that
sys_module_init() will return before scans are complete.  However, I
believe most distros userspace copes with this these days.  For example,
Debian has:

    # wait for the udevd childs to finish
    log_action_begin_msg "Waiting for /dev to be fully populated"
    while [ -d /dev/.udev/queue/ ]; do
        sleep 1
        udevd_timeout=$(($udevd_timeout - 1))
[...]

Since the scsi scan is going to be finding new devices the entire time,
the queue directory is going to not empty.

> ...
> > --- ./include/scsi/scsi_host.h	27 May 2006 15:58:17 -0000	1.27.2.1
> > +++ ./include/scsi/scsi_host.h	19 May 2006 02:43:19 -0000	1.27
> > @@ -541,6 +541,9 @@ struct Scsi_Host {
> >  	 */
> >  	unsigned ordered_tag:1;
> >  
> > +	/* Are we currently performing an async scan? */
> 
> Perhaps add "private to scsi core" to the comment.

Sure, good idea.

> > +	unsigned async_scan:1;
> 
> This flag is written under protection of async_scan_lock but read
> without lock protection and without being an atomic variable. Is this
> safe? I suppose it is as long as scan methods (by do_scan_async kthread,
> by another thread associated to the LLDD or transport, by userspace) are
> not mixed.

Hmmm.  It looks to me like there's some really narrow windows where
it's unsafe.  For example, drivers call scsi_add_host() which makes it
visible to userspace.  Then userspace could ask to scan something before
the driver calls scsi_scan_host(), get past the check for async_scan,
then the other thread sets async_scan, so when the first thread calls
scsi_add_lun(), it then doesn't add the lun to sysfs.  Actually, this
one's safe because it'll get added by the second thread when it completes.

I've looked some more and there are other races, but I can't see one
which results in a double-add or a failed add.  Can anyone see one?

  reply	other threads:[~2006-05-29 13:05 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-05-11 14:33 [RFC] Asynchronous scsi scanning Matthew Wilcox
2006-05-11 18:15 ` Mike Christie
2006-05-11 18:21   ` Matthew Wilcox
2006-05-11 18:49     ` Mike Christie
2006-05-11 18:56       ` Matthew Wilcox
2006-05-11 19:09         ` Mike Christie
2006-05-18 17:22 ` [PATCH] " Matthew Wilcox
2006-05-29  3:19   ` Asynchronous scsi scanning, version 9 Matthew Wilcox
2006-05-29  8:38     ` Stefan Richter
2006-05-29 13:05       ` Matthew Wilcox [this message]
2006-05-29 13:11         ` Arjan van de Ven
2006-05-29 13:19           ` Matthew Wilcox
2006-05-31 23:21         ` Patrick Mansfield
2006-06-01 12:22           ` Kay Sievers
2006-10-26 19:53             ` maximilian attems
2006-06-01 13:14           ` Alexander E. Patrakov
2006-06-01 13:21             ` maximilian attems
2006-06-01 13:23             ` Matthew Wilcox
2006-06-01 13:26               ` Alexander E. Patrakov
2006-06-01 14:00               ` Arjan van de Ven
2006-06-25 21:15               ` James Bottomley
2006-06-25 22:46                 ` Matthew Wilcox
2006-06-26  8:24                   ` Arjan van de Ven
2006-06-26 12:40                     ` Matthew Wilcox
2006-06-26 12:59                       ` Arjan van de Ven
2006-06-26 16:03                         ` Greg KH
2006-06-26 14:44                       ` Matthew Dharm
2006-06-26 15:18                         ` Matthew Wilcox
2006-06-26 15:44                           ` James Bottomley
2006-06-26 16:02                           ` Greg KH
2006-06-26 21:08                           ` Matthew Dharm
2006-06-26 22:15                             ` Matthew Wilcox
2006-06-26 18:55                         ` [SPAM] " Doug Ledford
2006-06-26 21:04                           ` Matthew Dharm
2006-06-26 21:20                             ` Doug Ledford
2006-06-26 20:58                 ` Linas Vepstas
2006-06-26 21:14                   ` James Bottomley
2006-06-26 21:21                     ` Linas Vepstas
2006-06-26 21:41                       ` James Bottomley
2006-06-28  7:52                     ` Hannes Reinecke
2006-06-28 16:03                       ` 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=20060529130515.GE23405@parisc-linux.org \
    --to=matthew@wil.cx \
    --cc=linux-scsi@vger.kernel.org \
    --cc=stefanr@s5r6.in-berlin.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).