* Patch for oopses if sd_init fails
@ 2001-12-06 0:39 Pete Zaitcev
0 siblings, 0 replies; only message in thread
From: Pete Zaitcev @ 2001-12-06 0:39 UTC (permalink / raw)
To: linux-kernel; +Cc: zaitcev
This patch does not fix _all_ of oopses, I am working on
a worse one yet in scsi.c. This whole area is a rat hole.
However, I would appreciate if Marcelo
added those now - if nobody disagrees.
Ask me for precise oops scenarios, if anything is unclear.
-- Pete
diff -ur -X dontdiff linux-2.4.17-pre4/drivers/scsi/sd.c linux-2.4.17-pre4-p3/drivers/scsi/sd.c
--- linux-2.4.17-pre4/drivers/scsi/sd.c Fri Nov 9 14:05:06 2001
+++ linux-2.4.17-pre4-p3/drivers/scsi/sd.c Wed Dec 5 15:10:50 2001
@@ -1175,7 +1175,8 @@
kfree(sd_gendisks[i].de_arr);
kfree(sd_gendisks[i].flags);
}
- kfree(sd_gendisks);
+ if (sd_gendisks != &sd_gendisk)
+ kfree(sd_gendisks);
cleanup_sd_gendisks:
kfree(sd);
cleanup_sd:
@@ -1188,6 +1189,7 @@
kfree(sd_sizes);
cleanup_disks:
kfree(rscsi_disks);
+ rscsi_disks = NULL;
cleanup_devfs:
for (i = 0; i < N_USED_SD_MAJORS; i++) {
devfs_unregister_blkdev(SD_MAJOR(i), "sd");
@@ -1251,7 +1253,7 @@
if (SDp->type != TYPE_DISK && SDp->type != TYPE_MOD)
return 0;
- if (sd_template.nr_dev >= sd_template.dev_max) {
+ if (sd_template.nr_dev >= sd_template.dev_max || rscsi_disks == NULL) {
SDp->attached--;
return 1;
}
@@ -1347,6 +1349,9 @@
int i, j;
int max_p;
int start;
+
+ if (rscsi_disks == NULL)
+ return;
for (dpnt = rscsi_disks, i = 0; i < sd_template.dev_max; i++, dpnt++)
if (dpnt->device == SDp) {
diff -ur -X dontdiff linux-2.4.17-pre4/drivers/scsi/sr.c linux-2.4.17-pre4-p3/drivers/scsi/sr.c
--- linux-2.4.17-pre4/drivers/scsi/sr.c Thu Oct 25 13:58:35 2001
+++ linux-2.4.17-pre4-p3/drivers/scsi/sr.c Wed Dec 5 15:32:09 2001
@@ -542,7 +542,7 @@
if (SDp->type != TYPE_ROM && SDp->type != TYPE_WORM)
return 1;
- if (sr_template.nr_dev >= sr_template.dev_max) {
+ if (sr_template.nr_dev >= sr_template.dev_max || scsi_CDs == NULL) {
SDp->attached--;
return 1;
}
@@ -830,6 +830,7 @@
kfree(sr_sizes);
cleanup_cds:
kfree(scsi_CDs);
+ scsi_CDs = NULL;
cleanup_devfs:
devfs_unregister_blkdev(MAJOR_NR, "sr");
sr_registered--;
@@ -904,6 +905,9 @@
{
Scsi_CD *cpnt;
int i;
+
+ if (scsi_CDs == NULL)
+ return;
for (cpnt = scsi_CDs, i = 0; i < sr_template.dev_max; i++, cpnt++)
if (cpnt->device == SDp) {
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2001-12-06 0:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-12-06 0:39 Patch for oopses if sd_init fails Pete Zaitcev
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.