mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	btrfs: don't pass a holder for non-exclusive blkdev_get_by_path
Passing a holder to blkdev_get_by_path when FMODE_EXCL isn't set doesn't
make sense, so pass NULL instead and remove the holder argument from the
call chains the only end up in non-FMODE_EXCL blkdev_get_by_path calls.
Exclusive mode for device scanning is not used since commit 50d281fc43
("btrfs: scan device in non-exclusive mode")".
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Acked-by: Christian Brauner <brauner@kernel.org>
Acked-by: David Sterba <dsterba@suse.com>
Link: https://lore.kernel.org/r/20230608110258.189493-15-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
			
			
This commit is contained in:
		
							parent
							
								
									5ee607675d
								
							
						
					
					
						commit
						2ef789288a
					
				
					 3 changed files with 15 additions and 21 deletions
				
			
		|  | @ -849,8 +849,7 @@ out: | |||
|  * All other options will be parsed on much later in the mount process and | ||||
|  * only when we need to allocate a new super block. | ||||
|  */ | ||||
| static int btrfs_parse_device_options(const char *options, fmode_t flags, | ||||
| 				      void *holder) | ||||
| static int btrfs_parse_device_options(const char *options, fmode_t flags) | ||||
| { | ||||
| 	substring_t args[MAX_OPT_ARGS]; | ||||
| 	char *device_name, *opts, *orig, *p; | ||||
|  | @ -884,8 +883,7 @@ static int btrfs_parse_device_options(const char *options, fmode_t flags, | |||
| 				error = -ENOMEM; | ||||
| 				goto out; | ||||
| 			} | ||||
| 			device = btrfs_scan_one_device(device_name, flags, | ||||
| 					holder); | ||||
| 			device = btrfs_scan_one_device(device_name, flags); | ||||
| 			kfree(device_name); | ||||
| 			if (IS_ERR(device)) { | ||||
| 				error = PTR_ERR(device); | ||||
|  | @ -1477,13 +1475,13 @@ static struct dentry *btrfs_mount_root(struct file_system_type *fs_type, | |||
| 	} | ||||
| 
 | ||||
| 	mutex_lock(&uuid_mutex); | ||||
| 	error = btrfs_parse_device_options(data, mode, fs_type); | ||||
| 	error = btrfs_parse_device_options(data, mode); | ||||
| 	if (error) { | ||||
| 		mutex_unlock(&uuid_mutex); | ||||
| 		goto error_fs_info; | ||||
| 	} | ||||
| 
 | ||||
| 	device = btrfs_scan_one_device(device_name, mode, fs_type); | ||||
| 	device = btrfs_scan_one_device(device_name, mode); | ||||
| 	if (IS_ERR(device)) { | ||||
| 		mutex_unlock(&uuid_mutex); | ||||
| 		error = PTR_ERR(device); | ||||
|  | @ -2190,8 +2188,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, | |||
| 	switch (cmd) { | ||||
| 	case BTRFS_IOC_SCAN_DEV: | ||||
| 		mutex_lock(&uuid_mutex); | ||||
| 		device = btrfs_scan_one_device(vol->name, FMODE_READ, | ||||
| 					       &btrfs_root_fs_type); | ||||
| 		device = btrfs_scan_one_device(vol->name, FMODE_READ); | ||||
| 		ret = PTR_ERR_OR_ZERO(device); | ||||
| 		mutex_unlock(&uuid_mutex); | ||||
| 		break; | ||||
|  | @ -2205,8 +2202,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, | |||
| 		break; | ||||
| 	case BTRFS_IOC_DEVICES_READY: | ||||
| 		mutex_lock(&uuid_mutex); | ||||
| 		device = btrfs_scan_one_device(vol->name, FMODE_READ, | ||||
| 					       &btrfs_root_fs_type); | ||||
| 		device = btrfs_scan_one_device(vol->name, FMODE_READ); | ||||
| 		if (IS_ERR(device)) { | ||||
| 			mutex_unlock(&uuid_mutex); | ||||
| 			ret = PTR_ERR(device); | ||||
|  |  | |||
|  | @ -1348,8 +1348,7 @@ int btrfs_forget_devices(dev_t devt) | |||
|  * and we are not allowed to call set_blocksize during the scan. The superblock | ||||
|  * is read via pagecache | ||||
|  */ | ||||
| struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags, | ||||
| 					   void *holder) | ||||
| struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags) | ||||
| { | ||||
| 	struct btrfs_super_block *disk_super; | ||||
| 	bool new_device_added = false; | ||||
|  | @ -1368,16 +1367,16 @@ struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags, | |||
| 	 */ | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Avoid using flag |= FMODE_EXCL here, as the systemd-udev may | ||||
| 	 * initiate the device scan which may race with the user's mount | ||||
| 	 * or mkfs command, resulting in failure. | ||||
| 	 * Since the device scan is solely for reading purposes, there is | ||||
| 	 * no need for FMODE_EXCL. Additionally, the devices are read again | ||||
| 	 * Avoid an exclusive open here, as the systemd-udev may initiate the | ||||
| 	 * device scan which may race with the user's mount or mkfs command, | ||||
| 	 * resulting in failure. | ||||
| 	 * Since the device scan is solely for reading purposes, there is no | ||||
| 	 * need for an exclusive open. Additionally, the devices are read again | ||||
| 	 * during the mount process. It is ok to get some inconsistent | ||||
| 	 * values temporarily, as the device paths of the fsid are the only | ||||
| 	 * required information for assembling the volume. | ||||
| 	 */ | ||||
| 	bdev = blkdev_get_by_path(path, flags, holder, NULL); | ||||
| 	bdev = blkdev_get_by_path(path, flags, NULL, NULL); | ||||
| 	if (IS_ERR(bdev)) | ||||
| 		return ERR_CAST(bdev); | ||||
| 
 | ||||
|  | @ -2381,7 +2380,7 @@ int btrfs_get_dev_args_from_path(struct btrfs_fs_info *fs_info, | |||
| 		return -ENOMEM; | ||||
| 	} | ||||
| 
 | ||||
| 	ret = btrfs_get_bdev_and_sb(path, FMODE_READ, fs_info->bdev_holder, 0, | ||||
| 	ret = btrfs_get_bdev_and_sb(path, FMODE_READ, NULL, 0, | ||||
| 				    &bdev, &disk_super); | ||||
| 	if (ret) { | ||||
| 		btrfs_put_dev_args_from_path(args); | ||||
|  |  | |||
|  | @ -600,8 +600,7 @@ struct btrfs_block_group *btrfs_create_chunk(struct btrfs_trans_handle *trans, | |||
| void btrfs_mapping_tree_free(struct extent_map_tree *tree); | ||||
| int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, | ||||
| 		       fmode_t flags, void *holder); | ||||
| struct btrfs_device *btrfs_scan_one_device(const char *path, | ||||
| 					   fmode_t flags, void *holder); | ||||
| struct btrfs_device *btrfs_scan_one_device(const char *path, fmode_t flags); | ||||
| int btrfs_forget_devices(dev_t devt); | ||||
| void btrfs_close_devices(struct btrfs_fs_devices *fs_devices); | ||||
| void btrfs_free_extra_devids(struct btrfs_fs_devices *fs_devices); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Christoph Hellwig
						Christoph Hellwig