From: Matthew Dharm <mdharm-scsi@one-eyed-alien.net>
To: James Bottomley <James.Bottomley@steeleye.com>
Cc: Ben Collins <bcollins@debian.org>,
SCSI Mailing List <linux-scsi@vger.kernel.org>
Subject: Re: FWD: [BK PATCH] SCSI host num allocation improvement
Date: Thu, 26 Feb 2004 16:56:01 -0800 [thread overview]
Message-ID: <20040227005601.GA6127@one-eyed-alien.net> (raw)
In-Reply-To: <1077842444.2662.123.camel@mulgrave>
[-- Attachment #1: Type: text/plain, Size: 6828 bytes --]
My only concern with something like this is the userspace race problem.
i.e the following sequence of events:
(1) User uses cdrecord -scanbus to locate their device (host:bus:dev:lun)
(2) HBA is disconnected
(3) New HBA is added
(4) User issues command to host:bus:dev:lun, and addresses the wrong device
While the current system doesn't prevent this, it makes it a much more
difficult situation to happen.
Matt
On Thu, Feb 26, 2004 at 06:40:43PM -0600, James Bottomley wrote:
> I'm forwarding this to linux-scsi, which is the appropriate list to
> scrutinise it.
>
> James
>
> Date: Thu, 26 Feb 2004 18:54:12 -0500
> From: Ben Collins <bcollins@debian.org>
> Subject: [BK PATCH] SCSI host num allocation improvement
> To: James Bottomley <James.Bottomley@steeleye.com>
> Cc: Linux Kernel <linux-kernel@vger.kernel.org>
> X-Spam-Status: No, hits=-5.9 required=5.0
> tests=BAYES_20,PATCH_UNIFIED_DIFF,USER_AGENT_MUTT autolearn=ham version=2.55
>
> After doing a large round of debugging and fixups for ieee1394, I
> started getting really aggrivated with the way that the scsi layer
> allocates host numbers by forever incrementing from the last one.
>
> Before too long, I was getting scsi137, etc. Not only did it look bad,
> it was bad. Cdrecord only scans bus 0-15, which means after a few
> hotplugs with your USB or Firewire CD/DVD recorder, you wont be able to
> burn to it. Yes, I know cdrecord needs to be fixed aswell, but I've had
> my fill of trying to convince the author of anything, so I wont be
> sending him a patch.
>
> Anyway, this patch enables a race free (I hope) allocation of host
> numbers. And it will pick the lowest available number first. I've only
> tested it with ieee1394 sbp2, so real scsi users should give it a go.
>
>
> You can import this changeset into BK by piping this whole message to:
> '| bk receive [path to repository]' or apply the patch as usual.
>
> ===================================================================
>
>
> ChangeSet@1.1589, 2004-02-26 18:40:58-05:00, bcollins@debian.org
> [SCSI]: Add a scsi_alloc_host_num function for race free, and non-incremental host ids
>
>
> hosts.c | 44 ++++++++++++++++++++++++++++++++++++++++----
> 1 files changed, 40 insertions(+), 4 deletions(-)
>
>
> diff -Nru a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
> --- a/drivers/scsi/hosts.c Thu Feb 26 18:52:00 2004
> +++ b/drivers/scsi/hosts.c Thu Feb 26 18:52:00 2004
> @@ -38,9 +38,6 @@
> #include "scsi_logging.h"
>
>
> -static int scsi_host_next_hn; /* host_no for next new host */
> -
> -
> static void scsi_host_cls_release(struct class_device *class_dev)
> {
> put_device(&class_to_shost(class_dev)->shost_gendev);
> @@ -166,6 +163,38 @@
> kfree(shost);
> }
>
> +static DECLARE_MUTEX(host_num_lock);
> +/**
> + * scsi_host_num_alloc - allocate a unique host number for a scsi host.
> + *
> + * Note:
> + * Must hold host_num_lock when calling this, and continue holding it
> + * till after the host is added to the shost_class.
> + *
> + * Return value:
> + * A unique host number.
> + **/
> +static int scsi_host_num_alloc(void)
> +{
> + int host_num = 0;
> + struct class *class = &shost_class;
> + struct class_device *cdev;
> + struct Scsi_Host *shost;
> +
> + down_read(&class->subsys.rwsem);
> +next_host_num_try:
> + list_for_each_entry(cdev, &class->children, node) {
> + shost = class_to_shost(cdev);
> + if (shost->host_no == host_num) {
> + host_num++;
> + goto next_host_num_try;
> + }
> + }
> + up_read(&class->subsys.rwsem);
> +
> + return host_num;
> +}
> +
> /**
> * scsi_host_alloc - register a scsi host adapter instance.
> * @sht: pointer to scsi host template
> @@ -214,7 +243,6 @@
>
> init_MUTEX(&shost->scan_mutex);
>
> - shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */
> shost->dma_channel = 0xff;
>
> /* These three are default values which can be overridden */
> @@ -263,6 +291,12 @@
> if (rval)
> goto fail_kfree;
>
> + /* Hold this lock until after we've added this to the scsi_host
> + * class, to avoid race condititons with the host number
> + * allocation scheme. */
> + down(&host_num_lock);
> + shost->host_no = scsi_host_num_alloc();
> +
> device_initialize(&shost->shost_gendev);
> snprintf(shost->shost_gendev.bus_id, BUS_ID_SIZE, "host%d",
> shost->host_no);
> @@ -273,6 +307,8 @@
> shost->shost_classdev.class = &shost_class;
> snprintf(shost->shost_classdev.class_id, BUS_ID_SIZE, "host%d",
> shost->host_no);
> +
> + up(&host_num_lock);
>
> shost->eh_notify = &complete;
> rval = kernel_thread(scsi_error_handler, shost, 0);
>
> ===================================================================
>
>
> This BitKeeper patch contains the following changesets:
> 1.1589
> ## Wrapped with gzip_uu ##
>
>
> M'XL( *"&/D [56:V_;-A3]+/Z*"Q3('">6J*<=!0[2)<$6;-V"9 $&=(5!
> MDTQ$1*8RDK(;S/WO(ZG*>=1ML:*3!4BZO(]S[SF4_ JN-5=E,*=-70NIT2OX
> MN=&F#!B?"R+#1MU:TV736%/4:A5I1:,[KB2O(^O?OA\E88&LRP4QM((E5[H,
> MXC#=6,S#/2^#R[.?KG]]?8G0= HG%9&W_(H;F$Z1:=22U$P?$U/5C0R-(E(O
> MN"$A;1;KC>LZP3BQOSP>IS@OUG&!L_&:QBR.219SAI-L4F2(D25?''?PPOG=
> M7!@=2AO]+$^&DR3&*4[B\3K/\GB"3B$.XWQR #B+<!(E!<23,L-E/AGAO,08
> M^ND</TX%]F(88?0C?-\.3A"%MU<G5^?O2GC-&!#05(L9J>N&SBK+S$RV"[AI
> M)36BD7#3*%"$<KA1G.\#D0QD(T="4L477!I2@PL"P33Z!?(,CS&Z>&0 C?[C
> M@1 F&!U]I6FFA!-"Y*!'KKX.Z9/^,XSMY).DR-9S/)GS<4YRRT:6L*V3_FPZ
> M1V21I.E!DJ]3'"=C+Z]MWE]7VK=#1N3N?G'<:%8[L&_[,N\^FS*-DQ3C/,^L
> M_I(TCC.OOX/Q,_6E!V62?TE]&891]K_([[O+KN/F=QBIE3^MC"ZVTO0-<CS-
> M8DC1>5Q,($V0-L0("J=G)_9E<S9[<_W'V9^#'O[,]G*W>XBBX1#!L&MPL^8[
> MA1'X*S'<3J"5XN^6=XU8ESE7ON]N--X<VCPNU6^-X:6[\<>;U@943<W@6658
> M55P")8[*6S"5T-W@:".-?9%R'^*6A-FD,J*N@=P86]I4'Z$(#80QSBSSWJA]
> M%5H3K7L\E]RT2H+51?L$U^LM';F(8=3/34BS;2R#92/8+OH'!<YAHX8IX$,4
> M:*-::L#7AV%WF<+.$U0OG&:,+X65SI#:F\>U*U?7?7I@Z&,/T5\H8,U*SA0G
> M;+#C8T='NIWK!QVJE>8+RZ7D[\TC6J,>2A34PCY:IF:<T&IFU:@>!J[6/O1)
> M:"5JIKC<MZIE?!=L9X$O:I%W&$TS\P8?:.L$@;B!@3>-CKIZC7VI;(;1Y0CZ
> MQ[T]%Q+<-I:C3R"ZI0_(G>W]%YNS U =DWWX(?I@K:?VRP4Q.D^*' H41$/[
> MR;9J<Y("K[36*JK7S8K_L.2]8IQ'+YN>9Q18@7@ ^VZ-.+*[S6V5R801II$:
> M5L)4CQKLQ.,C/VX8]U;0M+*[/P0K*,_<8.?EU@M>3G"KW'SKY\DXA\3-H+W_
> <--'F[X4M2>]TNYBFN#@@\W&!_@4R$Z&RT@@
>
>
> --
> Debian - http://www.debian.org/
> Linux 1394 - http://www.linux1394.org/
> Subversion - http://subversion.tigris.org/
> WatchGuard - http://www.watchguard.com/
--
Matthew Dharm Home: mdharm-usb@one-eyed-alien.net
Maintainer, Linux USB Mass Storage Driver
I don't have a left mouse button. I only have one mouse and it's on my right.
-- Customer
User Friendly, 2/13/1999
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2004-02-27 0:56 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-02-27 0:40 FWD: [BK PATCH] SCSI host num allocation improvement James Bottomley
2004-02-27 0:56 ` Matthew Dharm [this message]
2004-02-27 1:04 ` Ben Collins
2004-02-27 7:56 ` Arjan van de Ven
2004-02-27 12:30 ` Ben Collins
2004-02-27 12:39 ` Matthew Wilcox
2004-02-27 12:43 ` Ben Collins
2004-02-27 12:48 ` Christoph Hellwig
2004-02-27 12:48 ` Christoph Hellwig
2004-02-27 13:04 ` Ben Collins
2004-02-27 16:49 ` Mike Anderson
2004-02-27 17:00 ` Ben Collins
2004-02-27 21:26 ` Mike Anderson
2004-02-27 15:08 ` James Bottomley
2004-02-27 15:15 ` Ben Collins
2004-02-27 15:29 ` James Bottomley
2004-02-27 15:32 ` Ben Collins
2004-02-27 16:37 ` James Bottomley
2004-02-27 16:39 ` Ben Collins
-- strict thread matches above, loose matches on Subject: below --
2004-02-27 13:25 David.Egolf
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=20040227005601.GA6127@one-eyed-alien.net \
--to=mdharm-scsi@one-eyed-alien.net \
--cc=James.Bottomley@steeleye.com \
--cc=bcollins@debian.org \
--cc=linux-scsi@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox