lkml.org 
[lkml]   [1999]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
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]
\
 
 \ /
  Last update: 2005-03-22 13:53    [W:0.037 / U:1.336 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site