Loading fs/btrfs/super.c +9 −5 Original line number Diff line number Diff line Loading @@ -242,7 +242,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) * 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_early_options(const char *options, int flags, static int btrfs_parse_early_options(const char *options, fmode_t flags, void *holder, char **subvol_name, struct btrfs_fs_devices **fs_devices) { Loading Loading @@ -418,18 +418,22 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags, struct super_block *s; struct dentry *root; struct btrfs_fs_devices *fs_devices = NULL; fmode_t mode = FMODE_READ; int error = 0; error = btrfs_parse_early_options(data, flags, fs_type, if (!(flags & MS_RDONLY)) mode |= FMODE_WRITE; error = btrfs_parse_early_options(data, mode, fs_type, &subvol_name, &fs_devices); if (error) goto error; error = btrfs_scan_one_device(dev_name, flags, fs_type, &fs_devices); error = btrfs_scan_one_device(dev_name, mode, fs_type, &fs_devices); if (error) goto error_free_subvol_name; error = btrfs_open_devices(fs_devices, flags, fs_type); error = btrfs_open_devices(fs_devices, mode, fs_type); if (error) goto error_free_subvol_name; Loading Loading @@ -591,7 +595,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, len = strnlen(vol->name, BTRFS_PATH_NAME_MAX); switch (cmd) { case BTRFS_IOC_SCAN_DEV: ret = btrfs_scan_one_device(vol->name, MS_RDONLY, ret = btrfs_scan_one_device(vol->name, FMODE_READ, &btrfs_fs_type, &fs_devices); break; } Loading fs/btrfs/volumes.c +9 −9 Original line number Diff line number Diff line Loading @@ -394,7 +394,7 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices) } int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder) fmode_t flags, void *holder) { struct block_device *bdev; struct list_head *head = &fs_devices->devices; Loading Loading @@ -469,7 +469,7 @@ int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, error_brelse: brelse(bh); error_close: close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); error: continue; } Loading @@ -488,7 +488,7 @@ int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, } int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder) fmode_t flags, void *holder) { int ret; Loading @@ -507,7 +507,7 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, return ret; } int btrfs_scan_one_device(const char *path, int flags, void *holder, int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, struct btrfs_fs_devices **fs_devices_ret) { struct btrfs_super_block *disk_super; Loading Loading @@ -1008,7 +1008,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) goto out; } } else { bdev = open_bdev_exclusive(device_path, MS_RDONLY, bdev = open_bdev_exclusive(device_path, FMODE_READ, root->fs_info->bdev_holder); if (IS_ERR(bdev)) { ret = PTR_ERR(bdev); Loading Loading @@ -1078,7 +1078,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) BUG_ON(device->writeable); brelse(bh); if (bdev) close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); if (device->bdev) { close_bdev_exclusive(device->bdev, device->mode); Loading Loading @@ -1121,7 +1121,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) } if (bdev) { /* one close for us */ close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); } kfree(device->name); kfree(device); Loading @@ -1132,7 +1132,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) brelse(bh); error_close: if (bdev) close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); out: mutex_unlock(&root->fs_info->volume_mutex); mutex_unlock(&uuid_mutex); Loading Loading @@ -2913,7 +2913,7 @@ static int open_seed_devices(struct btrfs_root *root, u8 *fsid) goto out; } ret = __btrfs_open_devices(fs_devices, MS_RDONLY, ret = __btrfs_open_devices(fs_devices, FMODE_READ, root->fs_info->bdev_holder); if (ret) goto out; Loading fs/btrfs/volumes.h +2 −2 Original line number Diff line number Diff line Loading @@ -135,8 +135,8 @@ int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio, int mirror_num, int async_submit); int btrfs_read_super_device(struct btrfs_root *root, struct extent_buffer *buf); int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder); int btrfs_scan_one_device(const char *path, int flags, void *holder, fmode_t flags, void *holder); int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, struct btrfs_fs_devices **fs_devices_ret); int btrfs_close_devices(struct btrfs_fs_devices *fs_devices); int btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices); Loading Loading
fs/btrfs/super.c +9 −5 Original line number Diff line number Diff line Loading @@ -242,7 +242,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options) * 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_early_options(const char *options, int flags, static int btrfs_parse_early_options(const char *options, fmode_t flags, void *holder, char **subvol_name, struct btrfs_fs_devices **fs_devices) { Loading Loading @@ -418,18 +418,22 @@ static int btrfs_get_sb(struct file_system_type *fs_type, int flags, struct super_block *s; struct dentry *root; struct btrfs_fs_devices *fs_devices = NULL; fmode_t mode = FMODE_READ; int error = 0; error = btrfs_parse_early_options(data, flags, fs_type, if (!(flags & MS_RDONLY)) mode |= FMODE_WRITE; error = btrfs_parse_early_options(data, mode, fs_type, &subvol_name, &fs_devices); if (error) goto error; error = btrfs_scan_one_device(dev_name, flags, fs_type, &fs_devices); error = btrfs_scan_one_device(dev_name, mode, fs_type, &fs_devices); if (error) goto error_free_subvol_name; error = btrfs_open_devices(fs_devices, flags, fs_type); error = btrfs_open_devices(fs_devices, mode, fs_type); if (error) goto error_free_subvol_name; Loading Loading @@ -591,7 +595,7 @@ static long btrfs_control_ioctl(struct file *file, unsigned int cmd, len = strnlen(vol->name, BTRFS_PATH_NAME_MAX); switch (cmd) { case BTRFS_IOC_SCAN_DEV: ret = btrfs_scan_one_device(vol->name, MS_RDONLY, ret = btrfs_scan_one_device(vol->name, FMODE_READ, &btrfs_fs_type, &fs_devices); break; } Loading
fs/btrfs/volumes.c +9 −9 Original line number Diff line number Diff line Loading @@ -394,7 +394,7 @@ int btrfs_close_devices(struct btrfs_fs_devices *fs_devices) } int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder) fmode_t flags, void *holder) { struct block_device *bdev; struct list_head *head = &fs_devices->devices; Loading Loading @@ -469,7 +469,7 @@ int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, error_brelse: brelse(bh); error_close: close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); error: continue; } Loading @@ -488,7 +488,7 @@ int __btrfs_open_devices(struct btrfs_fs_devices *fs_devices, } int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder) fmode_t flags, void *holder) { int ret; Loading @@ -507,7 +507,7 @@ int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, return ret; } int btrfs_scan_one_device(const char *path, int flags, void *holder, int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, struct btrfs_fs_devices **fs_devices_ret) { struct btrfs_super_block *disk_super; Loading Loading @@ -1008,7 +1008,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) goto out; } } else { bdev = open_bdev_exclusive(device_path, MS_RDONLY, bdev = open_bdev_exclusive(device_path, FMODE_READ, root->fs_info->bdev_holder); if (IS_ERR(bdev)) { ret = PTR_ERR(bdev); Loading Loading @@ -1078,7 +1078,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) BUG_ON(device->writeable); brelse(bh); if (bdev) close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); if (device->bdev) { close_bdev_exclusive(device->bdev, device->mode); Loading Loading @@ -1121,7 +1121,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) } if (bdev) { /* one close for us */ close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); } kfree(device->name); kfree(device); Loading @@ -1132,7 +1132,7 @@ int btrfs_rm_device(struct btrfs_root *root, char *device_path) brelse(bh); error_close: if (bdev) close_bdev_exclusive(bdev, MS_RDONLY); close_bdev_exclusive(bdev, FMODE_READ); out: mutex_unlock(&root->fs_info->volume_mutex); mutex_unlock(&uuid_mutex); Loading Loading @@ -2913,7 +2913,7 @@ static int open_seed_devices(struct btrfs_root *root, u8 *fsid) goto out; } ret = __btrfs_open_devices(fs_devices, MS_RDONLY, ret = __btrfs_open_devices(fs_devices, FMODE_READ, root->fs_info->bdev_holder); if (ret) goto out; Loading
fs/btrfs/volumes.h +2 −2 Original line number Diff line number Diff line Loading @@ -135,8 +135,8 @@ int btrfs_map_bio(struct btrfs_root *root, int rw, struct bio *bio, int mirror_num, int async_submit); int btrfs_read_super_device(struct btrfs_root *root, struct extent_buffer *buf); int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags, void *holder); int btrfs_scan_one_device(const char *path, int flags, void *holder, fmode_t flags, void *holder); int btrfs_scan_one_device(const char *path, fmode_t flags, void *holder, struct btrfs_fs_devices **fs_devices_ret); int btrfs_close_devices(struct btrfs_fs_devices *fs_devices); int btrfs_close_extra_devices(struct btrfs_fs_devices *fs_devices); Loading