Merge tag 'fuse-fixes-5.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/mszer...
[linux-2.6-block.git] / drivers / block / brd.c
index df8103dd40ac2d1f6e5c29ef7790160a3335b35b..c18586fccb6f2b25c3d0ef535144deeabf640006 100644 (file)
@@ -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);