History

ubd: use blk_mq_alloc_disk and blk_cleanup_disk

Use blk_mq_alloc_disk and blk_cleanup_disk to simplify the gendisk and request_queue allocation.

Christoph Hellwig committed 5 years ago

Commit 35efb591 parent 7eb90f71 file · +14 −30Browse files

Unified · Split

arch/um/drivers/ubd_kern.c+14−30
@@ -825,7 +825,6 @@ static void ubd_device_release(struct device *dev) · 824 unmodified lines
825{825{
826 struct ubd *ubd_dev = dev_get_drvdata(dev);826 struct ubd *ubd_dev = dev_get_drvdata(dev);
827 827
828 blk_cleanup_queue(ubd_dev->queue);
829 blk_mq_free_tag_set(&ubd_dev->tag_set);828 blk_mq_free_tag_set(&ubd_dev->tag_set);
830 *ubd_dev = ((struct ubd) DEFAULT_UBD);829 *ubd_dev = ((struct ubd) DEFAULT_UBD);
831}830}
@@ -865,17 +864,12 @@ static const struct attribute_group *ubd_attr_groups[] = { · 33 unmodified lines
865 NULL,864 NULL,
866};865};
867 866
868static int ubd_disk_register(int major, u64 size, int unit,867static void ubd_disk_register(int major, u64 size, int unit,
869 struct gendisk **disk_out)868 struct gendisk *disk)
870{869{
871 struct gendisk *disk;
872
873 disk = alloc_disk(1 << UBD_SHIFT);
874 if(disk == NULL)
875 return -ENOMEM;
876
877 disk->major = major;870 disk->major = major;
878 disk->first_minor = unit << UBD_SHIFT;871 disk->first_minor = unit << UBD_SHIFT;
872 disk->minors = 1 << UBD_SHIFT;
879 disk->fops = &ubd_blops;873 disk->fops = &ubd_blops;
880 set_capacity(disk, size / 512);874 set_capacity(disk, size / 512);
881 sprintf(disk->disk_name, "ubd%c", 'a' + unit);875 sprintf(disk->disk_name, "ubd%c", 'a' + unit);
@@ -889,9 +883,6 @@ static int ubd_disk_register(int major, u64 size, int unit, · 7 unmodified lines
889 disk->private_data = &ubd_devs[unit];883 disk->private_data = &ubd_devs[unit];
890 disk->queue = ubd_devs[unit].queue;884 disk->queue = ubd_devs[unit].queue;
891 device_add_disk(&ubd_devs[unit].pdev.dev, disk, ubd_attr_groups);885 device_add_disk(&ubd_devs[unit].pdev.dev, disk, ubd_attr_groups);
892
893 *disk_out = disk;
894 return 0;
895}886}
896 887
897#define ROUND_BLOCK(n) ((n + (SECTOR_SIZE - 1)) & (-SECTOR_SIZE))888#define ROUND_BLOCK(n) ((n + (SECTOR_SIZE - 1)) & (-SECTOR_SIZE))
@@ -903,6 +894,7 @@ static const struct blk_mq_ops ubd_mq_ops = { · 5 unmodified lines
903static int ubd_add(int n, char **error_out)894static int ubd_add(int n, char **error_out)
904{895{
905 struct ubd *ubd_dev = &ubd_devs[n];896 struct ubd *ubd_dev = &ubd_devs[n];
897 struct gendisk *disk;
906 int err = 0;898 int err = 0;
907 899
908 if(ubd_dev->file == NULL)900 if(ubd_dev->file == NULL)
@@ -927,32 +919,24 @@ static int ubd_add(int n, char **error_out) · 18 unmodified lines
927 if (err)919 if (err)
928 goto out;920 goto out;
929 921
930 ubd_dev->queue = blk_mq_init_queue(&ubd_dev->tag_set);922 disk = blk_mq_alloc_disk(&ubd_dev->tag_set, ubd_dev);
931 if (IS_ERR(ubd_dev->queue)) {923 if (IS_ERR(disk)) {
932 err = PTR_ERR(ubd_dev->queue);924 err = PTR_ERR(disk);
933 goto out_cleanup_tags;925 goto out_cleanup_tags;
934 }926 }
927 ubd_dev->queue = disk->queue;
935 928
936 ubd_dev->queue->queuedata = ubd_dev;
937 blk_queue_write_cache(ubd_dev->queue, true, false);929 blk_queue_write_cache(ubd_dev->queue, true, false);
938
939 blk_queue_max_segments(ubd_dev->queue, MAX_SG);930 blk_queue_max_segments(ubd_dev->queue, MAX_SG);
940 blk_queue_segment_boundary(ubd_dev->queue, PAGE_SIZE - 1);931 blk_queue_segment_boundary(ubd_dev->queue, PAGE_SIZE - 1);
941 err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, &ubd_gendisk[n]);932 ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, disk);
942 if(err){933 ubd_gendisk[n] = disk;
943 *error_out = "Failed to register device";934 return 0;
944 goto out_cleanup_tags;
945 }
946
947 err = 0;
948out:
949 return err;
950 935
951out_cleanup_tags:936out_cleanup_tags:
952 blk_mq_free_tag_set(&ubd_dev->tag_set);937 blk_mq_free_tag_set(&ubd_dev->tag_set);
953 if (!(IS_ERR(ubd_dev->queue)))938out:
954 blk_cleanup_queue(ubd_dev->queue);939 return err;
955 goto out;
956}940}
957 941
958static int ubd_config(char *str, char **error_out)942static int ubd_config(char *str, char **error_out)
@@ -1055,7 +1039,7 @@ static int ubd_remove(int n, char **error_out) · 96 unmodified lines
1055 ubd_gendisk[n] = NULL;1039 ubd_gendisk[n] = NULL;
1056 if(disk != NULL){1040 if(disk != NULL){
1057 del_gendisk(disk);1041 del_gendisk(disk);
1058 put_disk(disk);1042 blk_cleanup_disk(disk);
1059 }1043 }
1060 1044
1061 err = 0;1045 err = 0;