return get_disk(z2ram_gendisk);
}
-static struct request_queue z2_queue;
+static struct request_queue *z2_queue;
int __init
z2_init(void)
{
+ int ret;
if (!MACH_IS_AMIGA)
return -ENXIO;
+ ret = -EBUSY;
if (register_blkdev(Z2RAM_MAJOR, DEVICE_NAME))
- return -EBUSY;
+ goto err;
+ ret = -ENOMEM;
z2ram_gendisk = alloc_disk(1);
- if (!z2ram_gendisk) {
- unregister_blkdev(Z2RAM_MAJOR, DEVICE_NAME);
- return -ENOMEM;
- }
+ if (!z2ram_gendisk)
+ goto out_disk;
+
+ z2_queue = blk_init_queue(do_z2_request, &z2ram_lock);
+ if (!z2_queue)
+ goto out_queue;
+
z2ram_gendisk->major = Z2RAM_MAJOR;
z2ram_gendisk->first_minor = 0;
z2ram_gendisk->fops = &z2_fops;
sprintf(z2ram_gendisk->disk_name, "z2ram");
- blk_init_queue(&z2_queue, do_z2_request, &z2ram_lock);
- z2ram_gendisk->queue = &z2_queue;
+ z2ram_gendisk->queue = z2_queue;
add_disk(z2ram_gendisk);
blk_register_region(MKDEV(Z2RAM_MAJOR, 0), Z2MINOR_COUNT, THIS_MODULE,
z2_find, NULL, NULL);
return 0;
+
+out_queue:
+ put_disk(z2ram_gendisk);
+out_disk:
+ unregister_blkdev(Z2RAM_MAJOR, DEVICE_NAME);
+err:
+ return ret;
}
#if defined(MODULE)
del_gendisk(z2ram_gendisk);
put_disk(z2ram_gendisk);
- blk_cleanup_queue(&z2_queue);
+ blk_cleanup_queue(z2_queue);
if ( current_device != -1 )
{