Messages in this thread Patch in this message | | | Date | Sat, 28 Aug 1999 18:02:11 +0200 | From | Kurt Garloff <> | Subject | [PATCH] SCSI deadlock+Oops for unsupp. sector size |
| |
Hi Linus, Alan,
appended a patch to prevent the deadlock on io_request_lock.
If the sd code detected an invalid sector size, it didn't release the io_request_lock acquired a few instructions above. Also the code to free the unuseable disk was wrong: It left the attach counter with 1. The code in revalidate_scsidisk stumbled across the removed disk with oopses.
The attached patch (against 2.2.12) fixes these problems.
-- Kurt Garloff <garloff@suse.de> Wuppertal, FRG PGP2 key: See mail header, key servers Linux kernel development SuSE GmbH, Nürnberg, FRG SCSI drivers: tmscsim(DC390), DC395 --- linux/drivers/scsi/sd.c.orig Fri Aug 27 13:39:10 1999 +++ linux/drivers/scsi/sd.c Sat Aug 28 17:02:07 1999 @@ -1358,15 +1358,19 @@ rscsi_disks[i].capacity = 0; } else { printk ("scsi : deleting disk entry.\n"); + sd_detach(rscsi_disks[i].device); rscsi_disks[i].device = NULL; + /* sd_template.nr_dev--; SD_GENDISK(i).nr_real--; - + */ /* Wake up a process waiting for device */ wake_up(&SCpnt->device->device_wait); scsi_release_command(SCpnt); SCpnt = NULL; + scsi_free(buffer, 512); + spin_unlock_irq(&io_request_lock); return i; } } @@ -1720,6 +1724,7 @@ #endif sd_gendisks->part[start].nr_sects = CAPACITY; + if (!rscsi_disks[target].device) return -EBUSY; resetup_one_dev(&SD_GENDISK(target), target % SCSI_DISKS_PER_MAJOR); [unhandled content-type:application/pgp-signature] | |