lkml.org 
[lkml]   [1998]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Panic in scsi.c
On Wed, Aug 19, 1998 at 01:52:03AM +0100, Richard Waltham wrote:
> Hi,
>
> I can generate the following panic in scsi.c at will using a CD media
> changer - Nakamichi MBR-7.
>
> Happens with kernel versions 2.0.35 and 2.0.36-pre6. I haven't checked any
> others.
>
> Attempt to allocate device channel 0, target 6, lun x
> Kernel Panic: No Device found in allocate_device().
>
> If I start the following two commands running in different vc's
>
> dd if=/dev/scdX of=/dev/null (X = 1, 2 ...)
>
> dd if=/dev/scdY of=/dev/null (Y = 0, 1 ...)
>
> and the second one started has Y < X I get the panic.
>
> eg
>
> dd if=/dev/sdc1 of=/dev/null - starting this first
>
> dd if=/dev/scd0 of=/dev/null - then starting this
>
> generates the panic. Starting scd0 first and then scd1 is OK - but very
> sloooooow as its spending most of the time changing CDs;)
>
> I guess the panic is caused by the call to allocate_device from
> do_sr_request in sr.c but don't know why.
>
> Anyone figure it out?

There have been reports that the code in scsi.c doesn't correctly honour the
BLIST_SINGLELUN and that this causes problems with Nakamichi MBR-7(2) and
certain host adapter settings. (Probably other devices will be affected too.)

Adding the NAKAMICHI to the blacklist (BLIST_SINGLELUN) and applying the
appended patch may help you. Chiaki Ishikawa reported successful operation
after creating the patch.

If I correctly judge what I see, this was a bug in scsi.c. Alan, is this bug
still in 2.0.36? (I'm not sure if it's the correct fix, though. There have
been reports about missing locking in sr.c, too ...)

--
Kurt Garloff, Dortmund
<K.Garloff@ping.de>
PGP key on http://student.physik.uni-dortmund.de/homepages/garloff
*** 1.3 1998/08/06 13:31:25
--- linux/drivers/scsi/scsi.c 1998/08/09 19:27:19
***************
*** 64,70 ****
#undef USE_STATIC_SCSI_MEMORY

/*
! static const char RCSid[] = "$Header: /usr/src/linux-2.0.xx/drivers/scsi/RCS/scsi.c,v 1.3 1998/08/06 13:31:25 guest Exp $";
*/


--- 64,70 ----
#undef USE_STATIC_SCSI_MEMORY

/*
! static const char RCSid[] = "$Header: /usr/src/linux-2.0.xx/drivers/scsi/RCS/scsi.c,v 1.4 1998/08/07 08:20:32 guest Exp guest $";
*/


***************
*** 766,771 ****
--- 766,780 ----
if ((bflags & BLIST_BORKEN) == 0)
SDpnt->borken = 0;

+ /* ---moved as well --- */
+ /*
+ * If we want to only allow I/O to one of the luns attached to this device
+ * at a time, then we set this flag.
+ */
+ if (bflags & BLIST_SINGLELUN)
+ SDpnt->single_lun = 1;
+
+
/*
* These devices need this "key" to unlock the devices so we can use it
*/
***************
*** 808,813 ****
--- 817,823 ----
if (bflags & BLIST_NOLUN)
return 0; /* break; */

+ /* we duplicated the following above after borken */
/*
* If we want to only allow I/O to one of the luns attached to this device
* at a time, then we set this flag.
***************
*** 961,966 ****
--- 971,985 ----
SCpnt = SCpnt->device_next;
}
} else {
+ /*
+ **
+ printk("single_lun: LINE=%d, (%d,%d,%d)\n",
+ __LINE__,
+ device->channel,
+ device->id,
+ device->lun);
+ **
+ */
SCpnt = device->host->host_queue;
while(SCpnt){
if(SCpnt->channel == device->channel
***************
*** 1092,1097 ****
--- 1111,1126 ----
SCpnt = SCpnt->device_next;
}
} else {
+ /*
+ **
+ printk("single_lun: LINE=%d, (%d,%d,%d)\n",
+ __LINE__,
+ device->channel,
+ device->id,
+ device->lun);
+ **
+ */
+
SCpnt = device->host->host_queue;
while(SCpnt){
if(SCpnt->channel == device->channel

\
 
 \ /
  Last update: 2005-03-22 13:44    [W:0.080 / U:0.424 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site