Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

um/drivers/ubd_kern: add error handling support for add_disk()

We never checked for errors on add_disk() as this function
returned void. Now that this is fixed, use the shiny new
error handling.

ubd_disk_register() never returned an error, so just fix
that now and let the caller handle the error condition.

Reviewed-by: Gabriel Krisman Bertazi <krisman@collabora.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Link: https://lore.kernel.org/r/20211015233028.2167651-8-mcgrof@kernel.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Luis Chamberlain and committed by
Jens Axboe
66638f16 21fd880d

+9 -4
+9 -4
arch/um/drivers/ubd_kern.c
··· 855 855 NULL, 856 856 }; 857 857 858 - static void ubd_disk_register(int major, u64 size, int unit, 859 - struct gendisk *disk) 858 + static int ubd_disk_register(int major, u64 size, int unit, 859 + struct gendisk *disk) 860 860 { 861 861 disk->major = major; 862 862 disk->first_minor = unit << UBD_SHIFT; ··· 873 873 874 874 disk->private_data = &ubd_devs[unit]; 875 875 disk->queue = ubd_devs[unit].queue; 876 - device_add_disk(&ubd_devs[unit].pdev.dev, disk, ubd_attr_groups); 876 + return device_add_disk(&ubd_devs[unit].pdev.dev, disk, ubd_attr_groups); 877 877 } 878 878 879 879 #define ROUND_BLOCK(n) ((n + (SECTOR_SIZE - 1)) & (-SECTOR_SIZE)) ··· 920 920 blk_queue_write_cache(ubd_dev->queue, true, false); 921 921 blk_queue_max_segments(ubd_dev->queue, MAX_SG); 922 922 blk_queue_segment_boundary(ubd_dev->queue, PAGE_SIZE - 1); 923 - ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, disk); 923 + err = ubd_disk_register(UBD_MAJOR, ubd_dev->size, n, disk); 924 + if (err) 925 + goto out_cleanup_disk; 926 + 924 927 ubd_gendisk[n] = disk; 925 928 return 0; 926 929 930 + out_cleanup_disk: 931 + blk_cleanup_disk(disk); 927 932 out_cleanup_tags: 928 933 blk_mq_free_tag_set(&ubd_dev->tag_set); 929 934 out: