summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2002-10-17 22:44:13 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2002-10-17 22:44:13 -0700
commit95c45597fc4b15ca5bd07e574d57e07d8d661a3c (patch)
tree25b93a6fb9f78c69a50ea3484f31c785b96f41ce
parenta3786fd837e2284ddd7f2e8b94e4c859d25b5c6f (diff)
Fix IDE init order dependency problem, noted by Jens Axboe.
This is pretty ugly, Al will fix up properly.
-rw-r--r--drivers/ide/ide.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index 1b0db39435a7..23d39bcf3e0b 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1526,7 +1526,19 @@ int ide_do_drive_cmd (ide_drive_t *drive, struct request *rq, ide_action_t actio
#endif
rq->errors = 0;
rq->rq_status = RQ_ACTIVE;
- rq->rq_dev = mk_kdev(drive->disk->major, drive->disk->first_minor);
+
+ /*
+ * Aiee. This is ugly, but it gets called before "drive->disk"
+ * has been initialized. Al will fix it, I'm sure.
+ */
+ if (drive->disk)
+ rq->rq_dev = mk_kdev(drive->disk->major, drive->disk->first_minor);
+ else {
+ printk("IDE init is ugly:");
+ dump_stack();
+ rq->rq_dev = mk_kdev(HWIF(drive)->major, (drive->select.b.unit) << PARTN_BITS);
+ }
+
rq->rq_disk = drive->disk;
if (action == ide_wait)
rq->waiting = &wait;