Skip to content

Commit

Permalink
block: simplify the disk_force_media_change interface
Browse files Browse the repository at this point in the history
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: Christoph Hellwig <hch@lst.de>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Message-Id: <20230811100828.1897174-9-hch@lst.de>
Signed-off-by: Christian Brauner <brauner@kernel.org>
  • Loading branch information
Christoph Hellwig authored and brauner committed Aug 21, 2023
1 parent 0c1c9a2 commit ab6860f
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 15 deletions.
15 changes: 4 additions & 11 deletions block/disk-events.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
6 changes: 3 additions & 3 deletions drivers/block/loop.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion include/linux/blkdev.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit ab6860f

Please sign in to comment.