Commit 444aa2c5 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe
Browse files

block: pass a gendisk on bdev_check_media_change



bdev_check_media_change should only ever be called for the whole device.
Pass a gendisk to make that explicit and rename the function to
disk_check_media_change.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarHannes Reinecke <hare@suse.de>
Acked-by: default avatarChristian Brauner <brauner@kernel.org>
Link: https://lore.kernel.org/r/20230608110258.189493-8-hch@lst.de


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 7ae24fce
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -263,31 +263,31 @@ static unsigned int disk_clear_events(struct gendisk *disk, unsigned int mask)
}

/**
 * bdev_check_media_change - check if a removable media has been changed
 * @bdev: block device to check
 * disk_check_media_change - check if a removable media has been changed
 * @disk: gendisk to check
 *
 * Check whether a removable media has been changed, and attempt to free all
 * dentries and inodes and invalidates all block device page cache entries in
 * that case.
 *
 * Returns %true if the block device changed, or %false if not.
 * Returns %true if the media has changed, or %false if not.
 */
bool bdev_check_media_change(struct block_device *bdev)
bool disk_check_media_change(struct gendisk *disk)
{
	unsigned int events;

	events = disk_clear_events(bdev->bd_disk, DISK_EVENT_MEDIA_CHANGE |
	events = disk_clear_events(disk, DISK_EVENT_MEDIA_CHANGE |
				   DISK_EVENT_EJECT_REQUEST);
	if (!(events & DISK_EVENT_MEDIA_CHANGE))
		return false;

	if (__invalidate_device(bdev, true))
	if (__invalidate_device(disk->part0, true))
		pr_warn("VFS: busy inodes on changed media %s\n",
			bdev->bd_disk->disk_name);
	set_bit(GD_NEED_PART_SCAN, &bdev->bd_disk->state);
			disk->disk_name);
	set_bit(GD_NEED_PART_SCAN, &disk->state);
	return true;
}
EXPORT_SYMBOL(bdev_check_media_change);
EXPORT_SYMBOL(disk_check_media_change);

/**
 * disk_force_media_change - force a media change event
+1 −1
Original line number Diff line number Diff line
@@ -1675,7 +1675,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
	}

	if (mode & (FMODE_READ|FMODE_WRITE)) {
		bdev_check_media_change(bdev);
		disk_check_media_change(bdev->bd_disk);
		if (mode & FMODE_WRITE) {
			int wrprot;

+3 −3
Original line number Diff line number Diff line
@@ -1760,8 +1760,8 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode,
		/* invalidate the buffer track to force a reread */
		BufferDrive = -1;
		set_bit(drive, &fake_change);
		if (bdev_check_media_change(bdev))
			floppy_revalidate(bdev->bd_disk);
		if (disk_check_media_change(disk))
			floppy_revalidate(disk);
		return 0;
	default:
		return -EINVAL;
@@ -1938,7 +1938,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
		return 0;

	if (mode & (FMODE_READ|FMODE_WRITE)) {
		if (bdev_check_media_change(bdev))
		if (disk_check_media_change(bdev->bd_disk))
			floppy_revalidate(bdev->bd_disk);
		if (mode & FMODE_WRITE) {
			if (p->wpstat) {
+8 −8
Original line number Diff line number Diff line
@@ -3210,13 +3210,13 @@ static int floppy_raw_cmd_ioctl(int type, int drive, int cmd,

#endif

static int invalidate_drive(struct block_device *bdev)
static int invalidate_drive(struct gendisk *disk)
{
	/* invalidate the buffer track to force a reread */
	set_bit((long)bdev->bd_disk->private_data, &fake_change);
	set_bit((long)disk->private_data, &fake_change);
	process_fd_request();
	if (bdev_check_media_change(bdev))
		floppy_revalidate(bdev->bd_disk);
	if (disk_check_media_change(disk))
		floppy_revalidate(disk);
	return 0;
}

@@ -3287,7 +3287,7 @@ static int set_geometry(unsigned int cmd, struct floppy_struct *g,
		    drive_state[current_drive].maxtrack ||
		    ((user_params[drive].sect ^ oldStretch) &
		     (FD_SWAPSIDES | FD_SECTBASEMASK)))
			invalidate_drive(bdev);
			invalidate_drive(bdev->bd_disk);
		else
			process_fd_request();
	}
@@ -3464,7 +3464,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
		current_type[drive] = NULL;
		floppy_sizes[drive] = MAX_DISK_SIZE << 1;
		drive_state[drive].keep_data = 0;
		return invalidate_drive(bdev);
		return invalidate_drive(bdev->bd_disk);
	case FDSETPRM:
	case FDDEFPRM:
		return set_geometry(cmd, &inparam.g, drive, type, bdev);
@@ -3503,7 +3503,7 @@ static int fd_locked_ioctl(struct block_device *bdev, fmode_t mode, unsigned int
	case FDFLUSH:
		if (lock_fdc(drive))
			return -EINTR;
		return invalidate_drive(bdev);
		return invalidate_drive(bdev->bd_disk);
	case FDSETEMSGTRESH:
		drive_params[drive].max_errors.reporting = (unsigned short)(param & 0x0f);
		return 0;
@@ -4054,7 +4054,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
			drive_state[drive].last_checked = 0;
			clear_bit(FD_OPEN_SHOULD_FAIL_BIT,
				  &drive_state[drive].flags);
			if (bdev_check_media_change(bdev))
			if (disk_check_media_change(bdev->bd_disk))
				floppy_revalidate(bdev->bd_disk);
			if (test_bit(FD_DISK_CHANGED_BIT, &drive_state[drive].flags))
				goto out;
+1 −1
Original line number Diff line number Diff line
@@ -640,7 +640,7 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
		return 0;

	if (mode & (FMODE_READ|FMODE_WRITE)) {
		if (bdev_check_media_change(bdev) && fs->disk_in)
		if (disk_check_media_change(bdev->bd_disk) && fs->disk_in)
			fs->ejected = 0;
		if ((mode & FMODE_WRITE) && fs->write_protected) {
			err = -EROFS;
Loading