|
@@ -396,15 +396,14 @@ static struct brd_device *brd_alloc(int i)
|
|
|
disk->first_minor = i * max_part;
|
|
|
disk->fops = &brd_fops;
|
|
|
disk->private_data = brd;
|
|
|
- disk->queue = brd->brd_queue;
|
|
|
disk->flags = GENHD_FL_EXT_DEVT;
|
|
|
sprintf(disk->disk_name, "ram%d", i);
|
|
|
set_capacity(disk, rd_size * 2);
|
|
|
- disk->queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO;
|
|
|
+ brd->brd_queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO;
|
|
|
|
|
|
/* Tell the block layer that this is not a rotational device */
|
|
|
- blk_queue_flag_set(QUEUE_FLAG_NONROT, disk->queue);
|
|
|
- blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, disk->queue);
|
|
|
+ blk_queue_flag_set(QUEUE_FLAG_NONROT, brd->brd_queue);
|
|
|
+ blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, brd->brd_queue);
|
|
|
|
|
|
return brd;
|
|
|
|
|
@@ -436,6 +435,7 @@ static struct brd_device *brd_init_one(int i, bool *new)
|
|
|
|
|
|
brd = brd_alloc(i);
|
|
|
if (brd) {
|
|
|
+ brd->brd_disk->queue = brd->brd_queue;
|
|
|
add_disk(brd->brd_disk);
|
|
|
list_add_tail(&brd->brd_list, &brd_devices);
|
|
|
}
|
|
@@ -503,8 +503,14 @@ static int __init brd_init(void)
|
|
|
|
|
|
/* point of no return */
|
|
|
|
|
|
- list_for_each_entry(brd, &brd_devices, brd_list)
|
|
|
+ list_for_each_entry(brd, &brd_devices, brd_list) {
|
|
|
+ /*
|
|
|
+ * associate with queue just before adding disk for
|
|
|
+ * avoiding to mess up failure path
|
|
|
+ */
|
|
|
+ brd->brd_disk->queue = brd->brd_queue;
|
|
|
add_disk(brd->brd_disk);
|
|
|
+ }
|
|
|
|
|
|
blk_register_region(MKDEV(RAMDISK_MAJOR, 0), 1UL << MINORBITS,
|
|
|
THIS_MODULE, brd_probe, NULL, NULL);
|