bcache: move the del_gendisk call out of bcache_device_free
authorChristoph Hellwig <hch@lst.de>
Mon, 9 Aug 2021 06:40:27 +0000 (08:40 +0200)
committerJens Axboe <axboe@kernel.dk>
Thu, 12 Aug 2021 16:29:36 +0000 (10:29 -0600)
Let the callers call del_gendisk so that we can check if add_disk
has been called properly for the cached device case instead of relying
on the block layer internal GENHD_FL_UP flag.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Coly Li <colyli@suse.de>
Link: https://lore.kernel.org/r/20210809064028.1198327-8-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/super.c

index d0f08e9..f2874c7 100644 (file)
@@ -885,11 +885,6 @@ static void bcache_device_free(struct bcache_device *d)
                bcache_device_detach(d);
 
        if (disk) {
-               bool disk_added = (disk->flags & GENHD_FL_UP) != 0;
-
-               if (disk_added)
-                       del_gendisk(disk);
-
                blk_cleanup_disk(disk);
                ida_simple_remove(&bcache_device_idx,
                                  first_minor_to_idx(disk->first_minor));
@@ -1371,8 +1366,10 @@ static void cached_dev_free(struct closure *cl)
 
        mutex_lock(&bch_register_lock);
 
-       if (atomic_read(&dc->running))
+       if (atomic_read(&dc->running)) {
                bd_unlink_disk_holder(dc->bdev, dc->disk.disk);
+               del_gendisk(dc->disk.disk);
+       }
        bcache_device_free(&dc->disk);
        list_del(&dc->list);
 
@@ -1518,6 +1515,7 @@ static void flash_dev_free(struct closure *cl)
        mutex_lock(&bch_register_lock);
        atomic_long_sub(bcache_dev_sectors_dirty(d),
                        &d->c->flash_dev_dirty_sectors);
+       del_gendisk(d->disk);
        bcache_device_free(d);
        mutex_unlock(&bch_register_lock);
        kobject_put(&d->kobj);