Commit ab6860f6 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Christian Brauner
Browse files

block: simplify the disk_force_media_change interface



Hard code the events to DISK_EVENT_MEDIA_CHANGE as that is the only
useful use case, and drop the superfluous return value.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarJosef Bacik <josef@toxicpanda.com>
Message-Id: <20230811100828.1897174-9-hch@lst.de>
Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
parent 0c1c9a27
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -294,25 +294,18 @@ EXPORT_SYMBOL(disk_check_media_change);
 * @disk: the disk which will raise the event
 * @events: the events to raise
 *
 * Generate uevents for the disk. If DISK_EVENT_MEDIA_CHANGE is present,
 * attempt to free all dentries and inodes and invalidates all block
 * Should be called when the media changes for @disk.  Generates a uevent
 * and attempts to free all dentries and inodes and invalidates all block
 * device page cache entries in that case.
 *
 * Returns %true if DISK_EVENT_MEDIA_CHANGE was raised, or %false if not.
 */
bool disk_force_media_change(struct gendisk *disk, unsigned int events)
void disk_force_media_change(struct gendisk *disk)
{
	disk_event_uevent(disk, events);

	if (!(events & DISK_EVENT_MEDIA_CHANGE))
		return false;

	disk_event_uevent(disk, DISK_EVENT_MEDIA_CHANGE);
	inc_diskseq(disk);
	if (__invalidate_device(disk->part0, true))
		pr_warn("VFS: busy inodes on changed media %s\n",
			disk->disk_name);
	set_bit(GD_NEED_PART_SCAN, &disk->state);
	return true;
}
EXPORT_SYMBOL_GPL(disk_force_media_change);

+3 −3
Original line number Diff line number Diff line
@@ -603,7 +603,7 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
		goto out_err;

	/* and ... switch */
	disk_force_media_change(lo->lo_disk, DISK_EVENT_MEDIA_CHANGE);
	disk_force_media_change(lo->lo_disk);
	blk_mq_freeze_queue(lo->lo_queue);
	mapping_set_gfp_mask(old_file->f_mapping, lo->old_gfp_mask);
	lo->lo_backing_file = file;
@@ -1067,7 +1067,7 @@ static int loop_configure(struct loop_device *lo, blk_mode_t mode,
	/* suppress uevents while reconfiguring the device */
	dev_set_uevent_suppress(disk_to_dev(lo->lo_disk), 1);

	disk_force_media_change(lo->lo_disk, DISK_EVENT_MEDIA_CHANGE);
	disk_force_media_change(lo->lo_disk);
	set_disk_ro(lo->lo_disk, (lo->lo_flags & LO_FLAGS_READ_ONLY) != 0);

	lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
@@ -1171,7 +1171,7 @@ static void __loop_clr_fd(struct loop_device *lo, bool release)
	if (!release)
		blk_mq_unfreeze_queue(lo->lo_queue);

	disk_force_media_change(lo->lo_disk, DISK_EVENT_MEDIA_CHANGE);
	disk_force_media_change(lo->lo_disk);

	if (lo->lo_flags & LO_FLAGS_PARTSCAN) {
		int err;
+1 −1
Original line number Diff line number Diff line
@@ -750,7 +750,7 @@ static inline int bdev_read_only(struct block_device *bdev)
}

bool set_capacity_and_notify(struct gendisk *disk, sector_t size);
bool disk_force_media_change(struct gendisk *disk, unsigned int events);
void disk_force_media_change(struct gendisk *disk);

void add_disk_randomness(struct gendisk *disk) __latent_entropy;
void rand_initialize_disk(struct gendisk *disk);