Commit 659e56ba authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: add a new revalidate_disk_size helper



revalidate_disk is a relative awkward helper for driver use, as it first
calls an optional driver method and then updates the block device size,
while most callers either don't need the method call at all, or want to
keep state between the caller and the called method.

Add a revalidate_disk_size helper that just performs the update of the
block device size from the gendisk one, and switch all drivers that do
not implement ->revalidate_disk to use the new helper instead of
revalidate_disk()

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Acked-by: default avatarSong Liu <song@kernel.org>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent f4ad06f2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4921,7 +4921,7 @@ static void rbd_dev_update_size(struct rbd_device *rbd_dev)
		size = (sector_t)rbd_dev->mapping.size / SECTOR_SIZE;
		dout("setting size to %llu sectors", (unsigned long long)size);
		set_capacity(rbd_dev->disk, size);
		revalidate_disk(rbd_dev->disk);
		revalidate_disk_size(rbd_dev->disk, true);
	}
}

+2 −8
Original line number Diff line number Diff line
@@ -102,18 +102,12 @@ static int rnbd_clt_set_dev_attr(struct rnbd_clt_dev *dev,
static int rnbd_clt_change_capacity(struct rnbd_clt_dev *dev,
				    size_t new_nsectors)
{
	int err = 0;

	rnbd_clt_info(dev, "Device size changed from %zu to %zu sectors\n",
		       dev->nsectors, new_nsectors);
	dev->nsectors = new_nsectors;
	set_capacity(dev->gd, dev->nsectors);
	err = revalidate_disk(dev->gd);
	if (err)
		rnbd_clt_err(dev,
			      "Failed to change device size from %zu to %zu, err: %d\n",
			      dev->nsectors, new_nsectors, err);
	return err;
	revalidate_disk_size(dev->gd, true);
	return 0;
}

static int process_msg_open_rsp(struct rnbd_clt_dev *dev,
+1 −1
Original line number Diff line number Diff line
@@ -598,7 +598,7 @@ static void virtblk_update_cache_mode(struct virtio_device *vdev)
	struct virtio_blk *vblk = vdev->priv;

	blk_queue_write_cache(vblk->disk->queue, writeback, false);
	revalidate_disk(vblk->disk);
	revalidate_disk_size(vblk->disk, true);
}

static const char *const virtblk_cache_types[] = {
+2 −2
Original line number Diff line number Diff line
@@ -1739,7 +1739,7 @@ static ssize_t disksize_store(struct device *dev,
	zram->disksize = disksize;
	set_capacity(zram->disk, zram->disksize >> SECTOR_SHIFT);

	revalidate_disk(zram->disk);
	revalidate_disk_size(zram->disk, true);
	up_write(&zram->init_lock);

	return len;
@@ -1786,7 +1786,7 @@ static ssize_t reset_store(struct device *dev,
	/* Make sure all the pending I/O are finished */
	fsync_bdev(bdev);
	zram_reset_device(zram);
	revalidate_disk(zram->disk);
	revalidate_disk_size(zram->disk, true);
	bdput(bdev);

	mutex_lock(&bdev->bd_mutex);
+1 −1
Original line number Diff line number Diff line
@@ -701,7 +701,7 @@ static void rs_set_capacity(struct raid_set *rs)
	struct gendisk *gendisk = dm_disk(dm_table_get_md(rs->ti->table));

	set_capacity(gendisk, rs->md.array_sectors);
	revalidate_disk(gendisk);
	revalidate_disk_size(gendisk, true);
}

/*
Loading