patch-2.4.21 linux-2.4.21/drivers/scsi/sd.c
Next file: linux-2.4.21/drivers/scsi/sg.c
Previous file: linux-2.4.21/drivers/scsi/scsi_scan.c
Back to the patch index
Back to the overall index
- Lines: 83
- Date:
2003-06-13 07:51:36.000000000 -0700
- Orig file:
linux-2.4.20/drivers/scsi/sd.c
- Orig date:
2002-08-02 17:39:44.000000000 -0700
diff -urN linux-2.4.20/drivers/scsi/sd.c linux-2.4.21/drivers/scsi/sd.c
@@ -621,9 +621,11 @@
/* An error occurred */
if (driver_byte(result) != 0 && /* An error occured */
- SCpnt->sense_buffer[0] == 0xF0) { /* Sense data is valid */
+ (SCpnt->sense_buffer[0] & 0x7f) == 0x70) { /* Sense data is valid */
switch (SCpnt->sense_buffer[2]) {
case MEDIUM_ERROR:
+ if (!(SCpnt->sense_buffer[0] & 0x80))
+ break;
error_sector = (SCpnt->sense_buffer[3] << 24) |
(SCpnt->sense_buffer[4] << 16) |
(SCpnt->sense_buffer[5] << 8) |
@@ -668,7 +670,7 @@
* hard error.
*/
print_sense("sd", SCpnt);
- result = 0;
+ SCpnt->result = 0;
SCpnt->sense_buffer[0] = 0x0;
good_sectors = this_count;
break;
@@ -729,15 +731,17 @@
* check_disk_change */
}
- /* Using Start/Stop enables differentiation between drive with
+ /*
+ * Using TEST_UNIT_READY enables differentiation between drive with
* no cartridge loaded - NOT READY, drive with changed cartridge -
* UNIT ATTENTION, or with same cartridge - GOOD STATUS.
- * This also handles drives that auto spin down. eg iomega jaz 1GB
- * as this will spin up the drive.
+ *
+ * Drives that auto spin down. eg iomega jaz 1G, will be started
+ * by sd_init_onedisk(), whenever revalidate_scsidisk() is called.
*/
retval = -ENODEV;
if (scsi_block_when_processing_errors(SDev))
- retval = scsi_ioctl(SDev, SCSI_IOCTL_START_UNIT, NULL);
+ retval = scsi_ioctl(SDev, SCSI_IOCTL_TEST_UNIT_READY, NULL);
if (retval) { /* Unable to test, unit probably not ready.
* This usually means there is no disc in the
@@ -1001,7 +1005,7 @@
*/
int m;
int hard_sector = sector_size;
- int sz = rscsi_disks[i].capacity * (hard_sector/256);
+ unsigned int sz = (rscsi_disks[i].capacity/2) * (hard_sector/256);
/* There are 16 minors allocated for each major device */
for (m = i << 4; m < ((i + 1) << 4); m++) {
@@ -1009,9 +1013,9 @@
}
printk("SCSI device %s: "
- "%d %d-byte hdwr sectors (%d MB)\n",
+ "%u %d-byte hdwr sectors (%u MB)\n",
nbuff, rscsi_disks[i].capacity,
- hard_sector, (sz/2 - sz/1250 + 974)/1950);
+ hard_sector, (sz - sz/625 + 974)/1950);
}
/* Rescale capacity to 512-byte units */
@@ -1439,16 +1443,14 @@
kfree(sd_blocksizes);
kfree(sd_hardsizes);
for (i = 0; i < N_USED_SD_MAJORS; i++) {
-#if 0 /* XXX aren't we forgetting to deallocate something? */
kfree(sd_gendisks[i].de_arr);
kfree(sd_gendisks[i].flags);
-#endif
kfree(sd_gendisks[i].part);
}
}
for (i = 0; i < N_USED_SD_MAJORS; i++) {
del_gendisk(&sd_gendisks[i]);
- blk_size[SD_MAJOR(i)] = NULL; /* XXX blksize_size actually? */
+ blksize_size[SD_MAJOR(i)] = NULL;
hardsect_size[SD_MAJOR(i)] = NULL;
read_ahead[SD_MAJOR(i)] = 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)