btrfs-progs: provide fs_info from btrfs_device

Likewise in the kernel code, provide fs_info access from struct
btrfs_device. This will help to unify the code between the kernel and
the userland.

Since fs_info can be NULL at the time of btrfs_add_to_fsid(), let's use
btrfs_open_devices() to set fs_info to the devices.

Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Naohiro Aota 2021-04-26 15:27:18 +09:00 committed by David Sterba
parent c4d2704c9a
commit acdd22ab68
5 changed files with 12 additions and 6 deletions

View File

@ -1446,7 +1446,7 @@ open_ctree_with_broken_chunk(struct recover_control *rc)
fs_info->is_chunk_recover = 1;
fs_info->fs_devices = rc->fs_devices;
ret = btrfs_open_devices(fs_info->fs_devices, O_RDWR);
ret = btrfs_open_devices(fs_info, fs_info->fs_devices, O_RDWR);
if (ret)
goto out;

View File

@ -141,6 +141,7 @@ int btrfs_add_to_fsid(struct btrfs_trans_handle *trans,
dev_item = &disk_super->dev_item;
uuid_generate(device->uuid);
device->fs_info = fs_info;
device->devid = 0;
device->type = 0;
device->io_width = io_width;

View File

@ -1270,7 +1270,7 @@ static struct btrfs_fs_info *__open_ctree_fd(int fp, struct open_ctree_flags *oc
if (flags & OPEN_CTREE_EXCLUSIVE)
oflags |= O_EXCL;
ret = btrfs_open_devices(fs_devices, oflags);
ret = btrfs_open_devices(fs_info, fs_devices, oflags);
if (ret)
goto out;

View File

@ -389,13 +389,17 @@ void btrfs_close_all_devices(void)
}
}
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices, int flags)
int btrfs_open_devices(struct btrfs_fs_info *fs_info,
struct btrfs_fs_devices *fs_devices, int flags)
{
int fd;
struct btrfs_device *device;
int ret;
list_for_each_entry(device, &fs_devices->devices, dev_list) {
if (!device->fs_info)
device->fs_info = fs_info;
if (!device->name) {
printk("no name for device %llu, skip it now\n", device->devid);
continue;
@ -2106,7 +2110,7 @@ static int open_seed_devices(struct btrfs_fs_info *fs_info, u8 *fsid)
memcpy(fs_devices->fsid, fsid, BTRFS_FSID_SIZE);
}
ret = btrfs_open_devices(fs_devices, O_RDONLY);
ret = btrfs_open_devices(fs_info, fs_devices, O_RDONLY);
if (ret)
goto out;

View File

@ -28,6 +28,7 @@ struct btrfs_device {
struct list_head dev_list;
struct btrfs_root *dev_root;
struct btrfs_fs_devices *fs_devices;
struct btrfs_fs_info *fs_info;
u64 total_ios;
@ -282,8 +283,8 @@ int btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
u64 *num_bytes, u64 type);
int btrfs_alloc_data_chunk(struct btrfs_trans_handle *trans,
struct btrfs_fs_info *fs_info, u64 *start, u64 num_bytes);
int btrfs_open_devices(struct btrfs_fs_devices *fs_devices,
int flags);
int btrfs_open_devices(struct btrfs_fs_info *fs_info,
struct btrfs_fs_devices *fs_devices, int flags);
int btrfs_close_devices(struct btrfs_fs_devices *fs_devices);
void btrfs_close_all_devices(void);
int btrfs_insert_dev_extent(struct btrfs_trans_handle *trans,