ubd: remove the ubd_gendisk array
authorChristoph Hellwig <hch@lst.de>
Thu, 22 Feb 2024 07:24:11 +0000 (08:24 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 27 Feb 2024 21:21:15 +0000 (14:21 -0700)
And add a disk pointer to the ubd structure instead to keep all
the per-device information together.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Richard Weinberger <richard@nod.at>
Link: https://lore.kernel.org/r/20240222072417.3773131-2-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
arch/um/drivers/ubd_kern.c

index 48e11f073551b4b60be3134ce264e8803d02f0f4..b203ebb17851259fc1d40bb95058659a972ab514 100644 (file)
@@ -125,9 +125,6 @@ static const struct block_device_operations ubd_blops = {
        .getgeo         = ubd_getgeo,
 };
 
-/* Protected by ubd_lock */
-static struct gendisk *ubd_gendisk[MAX_DEV];
-
 #ifdef CONFIG_BLK_DEV_UBD_SYNC
 #define OPEN_FLAGS ((struct openflags) { .r = 1, .w = 1, .s = 1, .c = 0, \
                                         .cl = 1 })
@@ -165,6 +162,7 @@ struct ubd {
        unsigned no_trim:1;
        struct cow cow;
        struct platform_device pdev;
+       struct gendisk *disk;
        struct request_queue *queue;
        struct blk_mq_tag_set tag_set;
        spinlock_t lock;
@@ -922,7 +920,6 @@ static int ubd_add(int n, char **error_out)
        if (err)
                goto out_cleanup_disk;
 
-       ubd_gendisk[n] = disk;
        return 0;
 
 out_cleanup_disk:
@@ -1014,7 +1011,6 @@ static int ubd_id(char **str, int *start_out, int *end_out)
 
 static int ubd_remove(int n, char **error_out)
 {
-       struct gendisk *disk = ubd_gendisk[n];
        struct ubd *ubd_dev;
        int err = -ENODEV;
 
@@ -1030,10 +1026,9 @@ static int ubd_remove(int n, char **error_out)
        if(ubd_dev->count > 0)
                goto out;
 
-       ubd_gendisk[n] = NULL;
-       if(disk != NULL){
-               del_gendisk(disk);
-               put_disk(disk);
+       if (ubd_dev->disk) {
+               del_gendisk(ubd_dev->disk);
+               put_disk(ubd_dev->disk);
        }
 
        err = 0;