|
@@ -2014,6 +2014,11 @@ static int __init atari_floppy_init (void)
|
|
|
unit[i].disk = alloc_disk(1);
|
|
|
if (!unit[i].disk)
|
|
|
goto Enomem;
|
|
|
+
|
|
|
+ unit[i].disk->queue = blk_init_queue(do_fd_request,
|
|
|
+ &ataflop_lock);
|
|
|
+ if (!unit[i].disk->queue)
|
|
|
+ goto Enomem;
|
|
|
}
|
|
|
|
|
|
if (UseTrackbuffer < 0)
|
|
@@ -2045,10 +2050,6 @@ static int __init atari_floppy_init (void)
|
|
|
sprintf(unit[i].disk->disk_name, "fd%d", i);
|
|
|
unit[i].disk->fops = &floppy_fops;
|
|
|
unit[i].disk->private_data = &unit[i];
|
|
|
- unit[i].disk->queue = blk_init_queue(do_fd_request,
|
|
|
- &ataflop_lock);
|
|
|
- if (!unit[i].disk->queue)
|
|
|
- goto Enomem;
|
|
|
set_capacity(unit[i].disk, MAX_DISK_SIZE * 2);
|
|
|
add_disk(unit[i].disk);
|
|
|
}
|
|
@@ -2063,13 +2064,17 @@ static int __init atari_floppy_init (void)
|
|
|
|
|
|
return 0;
|
|
|
Enomem:
|
|
|
- while (i--) {
|
|
|
- struct request_queue *q = unit[i].disk->queue;
|
|
|
+ do {
|
|
|
+ struct gendisk *disk = unit[i].disk;
|
|
|
|
|
|
- put_disk(unit[i].disk);
|
|
|
- if (q)
|
|
|
- blk_cleanup_queue(q);
|
|
|
- }
|
|
|
+ if (disk) {
|
|
|
+ if (disk->queue) {
|
|
|
+ blk_cleanup_queue(disk->queue);
|
|
|
+ disk->queue = NULL;
|
|
|
+ }
|
|
|
+ put_disk(unit[i].disk);
|
|
|
+ }
|
|
|
+ } while (i--);
|
|
|
|
|
|
unregister_blkdev(FLOPPY_MAJOR, "fd");
|
|
|
return -ENOMEM;
|