|
@@ -4131,8 +4131,7 @@ static struct kobject *floppy_find(dev_t dev, int *part, void *data)
|
|
|
|
|
|
static int __init do_floppy_init(void)
|
|
|
{
|
|
|
- int i, unit, drive;
|
|
|
- int err, dr;
|
|
|
+ int i, unit, drive, err;
|
|
|
|
|
|
set_debugt();
|
|
|
interruptjiffies = resultjiffies = jiffies;
|
|
@@ -4148,29 +4147,28 @@ static int __init do_floppy_init(void)
|
|
|
if (!floppy_wq)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- for (dr = 0; dr < N_DRIVE; dr++) {
|
|
|
- disks[dr] = alloc_disk(1);
|
|
|
- if (!disks[dr]) {
|
|
|
+ for (drive = 0; drive < N_DRIVE; drive++) {
|
|
|
+ disks[drive] = alloc_disk(1);
|
|
|
+ if (!disks[drive]) {
|
|
|
err = -ENOMEM;
|
|
|
goto out_put_disk;
|
|
|
}
|
|
|
|
|
|
- disks[dr]->queue = blk_init_queue(do_fd_request, &floppy_lock);
|
|
|
- if (!disks[dr]->queue) {
|
|
|
- put_disk(disks[dr]);
|
|
|
+ disks[drive]->queue = blk_init_queue(do_fd_request, &floppy_lock);
|
|
|
+ if (!disks[drive]->queue) {
|
|
|
err = -ENOMEM;
|
|
|
goto out_put_disk;
|
|
|
}
|
|
|
|
|
|
- blk_queue_max_hw_sectors(disks[dr]->queue, 64);
|
|
|
- disks[dr]->major = FLOPPY_MAJOR;
|
|
|
- disks[dr]->first_minor = TOMINOR(dr);
|
|
|
- disks[dr]->fops = &floppy_fops;
|
|
|
- sprintf(disks[dr]->disk_name, "fd%d", dr);
|
|
|
+ blk_queue_max_hw_sectors(disks[drive]->queue, 64);
|
|
|
+ disks[drive]->major = FLOPPY_MAJOR;
|
|
|
+ disks[drive]->first_minor = TOMINOR(drive);
|
|
|
+ disks[drive]->fops = &floppy_fops;
|
|
|
+ sprintf(disks[drive]->disk_name, "fd%d", drive);
|
|
|
|
|
|
- init_timer(&motor_off_timer[dr]);
|
|
|
- motor_off_timer[dr].data = dr;
|
|
|
- motor_off_timer[dr].function = motor_off_callback;
|
|
|
+ init_timer(&motor_off_timer[drive]);
|
|
|
+ motor_off_timer[drive].data = drive;
|
|
|
+ motor_off_timer[drive].function = motor_off_callback;
|
|
|
}
|
|
|
|
|
|
err = register_blkdev(FLOPPY_MAJOR, "fd");
|
|
@@ -4332,17 +4330,15 @@ out_unreg_region:
|
|
|
out_unreg_blkdev:
|
|
|
unregister_blkdev(FLOPPY_MAJOR, "fd");
|
|
|
out_put_disk:
|
|
|
- while (dr--) {
|
|
|
- del_timer_sync(&motor_off_timer[dr]);
|
|
|
- if (disks[dr]->queue) {
|
|
|
- blk_cleanup_queue(disks[dr]->queue);
|
|
|
- /*
|
|
|
- * put_disk() is not paired with add_disk() and
|
|
|
- * will put queue reference one extra time. fix it.
|
|
|
- */
|
|
|
- disks[dr]->queue = NULL;
|
|
|
+ for (drive = 0; drive < N_DRIVE; drive++) {
|
|
|
+ if (!disks[drive])
|
|
|
+ break;
|
|
|
+ if (disks[drive]->queue) {
|
|
|
+ del_timer_sync(&motor_off_timer[drive]);
|
|
|
+ blk_cleanup_queue(disks[drive]->queue);
|
|
|
+ disks[drive]->queue = NULL;
|
|
|
}
|
|
|
- put_disk(disks[dr]);
|
|
|
+ put_disk(disks[drive]);
|
|
|
}
|
|
|
destroy_workqueue(floppy_wq);
|
|
|
return err;
|