Re: LINUX Jobs for 2.4 update [scsi]

From: David Weinehall (tao@acc.umu.se)
Date: Sun May 28 2000 - 11:35:42 EST


So spracht Paul Gortmaker :

> The draft of SCSI-2 spec I have here hints that INQUIRY should be used
> to probe system configuration and that TEST_UNIT_READY is more for
> polling on devices with removable media. I tossed the TEST_UNIT_READY
> part out and INQUIRY alone works fine (one disk, 2 CDs and a tape on
> a BusLogic clone - all found as per usual).

After a quick test with this patch, I'm almost dancing on the table.

This patch fixes my bootup-problems with the ibmmca-driver. It seems that
IBM's SCSI-adapters expects a device-inquiry to be ... gasp! a
device-inquiry!, thus it returns an error-code if this is not he case.

Alan, I hope that you can apply this to the kernel.

Michael: You can stop chasing ghosts now. The bug isn't in your driver.
Instead you can continue chasing for race-conditions...

Paul: THANKS!

/David Weinehall
  _ _
 // David Weinehall <tao@acc.umu.se> /> Northern lights wander \\
// Project MCA Linux hacker // Dance across the winter sky //
\> http://www.acc.umu.se/~tao/ </ Full colour fire </

Patch courtesy of Paul Gortmaker:

--- 2400-test1/linux/drivers/scsi/scsi_scan.c~ Fri May 26 16:34:59 2000
+++ 2400-test1/linux/drivers/scsi/scsi_scan.c Sat May 27 06:14:44 2000
@@ -499,39 +499,14 @@
         SDpnt->expecting_cc_ua = 0;
         SDpnt->starved = 0;
 
- scsi_cmd[0] = TEST_UNIT_READY;
- scsi_cmd[1] = lun << 5;
- scsi_cmd[2] = scsi_cmd[3] = scsi_cmd[4] = scsi_cmd[5] = 0;
-
         SRpnt = scsi_allocate_request(SDpnt);
 
- SRpnt->sr_data_direction = SCSI_DATA_NONE;
-
- scsi_wait_req (SRpnt, (void *) scsi_cmd,
- (void *) NULL,
- 0, SCSI_TIMEOUT + 4 * HZ, 5);
-
- SCSI_LOG_SCAN_BUS(3, printk("scsi: scan_scsis_single id %d lun %d. Return code 0x%08x\n",
- dev, lun, SRpnt->sr_result));
- SCSI_LOG_SCAN_BUS(3, print_driverbyte(SRpnt->sr_result));
- SCSI_LOG_SCAN_BUS(3, print_hostbyte(SRpnt->sr_result));
- SCSI_LOG_SCAN_BUS(3, printk("\n"));
+ /*
+ * We used to do a TEST_UNIT_READY before the INQUIRY but that was
+ * not really necessary. Spec recommends using INQUIRY to scan for
+ * devices (and TEST_UNIT_READY to poll for media change). - Paul G.
+ */
 
- if (SRpnt->sr_result) {
- if (((driver_byte(SRpnt->sr_result) & DRIVER_SENSE) ||
- (status_byte(SRpnt->sr_result) & CHECK_CONDITION)) &&
- ((SRpnt->sr_sense_buffer[0] & 0x70) >> 4) == 7) {
- if (((SRpnt->sr_sense_buffer[2] & 0xf) != NOT_READY) &&
- ((SRpnt->sr_sense_buffer[2] & 0xf) != UNIT_ATTENTION) &&
- ((SRpnt->sr_sense_buffer[2] & 0xf) != ILLEGAL_REQUEST || lun > 0)) {
- scsi_release_request(SRpnt);
- return 1;
- }
- } else {
- scsi_release_request(SRpnt);
- return 0;
- }
- }
         SCSI_LOG_SCAN_BUS(3, printk("scsi: performing INQUIRY\n"));
         /*
          * Build an INQUIRY command block.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed May 31 2000 - 21:00:19 EST