btrfs: add owner and fs_info to alloc_state io_tree
Commit1c11b63eff
("btrfs: replace pending/pinned chunks lists with io tree") introduced btrfs_device::alloc_state extent io tree, but it doesn't initialize the fs_info and owner member. This means the following features are not properly supported: - Fs owner report for insert_state() error Without fs_info initialized, although btrfs_err() won't panic, it won't output which fs is causing the error. - Wrong owner for trace events alloc_state will get the owner as pinned extents. Fix this by assiging proper fs_info and owner for btrfs_device::alloc_state. Fixes:1c11b63eff
("btrfs: replace pending/pinned chunks lists with io tree") Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
4c448ce8b4
Коммит
154f7cb868
|
@ -48,6 +48,7 @@ enum {
|
|||
IO_TREE_INODE_FILE_EXTENT,
|
||||
IO_TREE_LOG_CSUM_RANGE,
|
||||
IO_TREE_SELFTEST,
|
||||
IO_TREE_DEVICE_ALLOC_STATE,
|
||||
};
|
||||
|
||||
struct extent_io_tree {
|
||||
|
|
|
@ -406,7 +406,7 @@ void __exit btrfs_cleanup_fs_uuids(void)
|
|||
* Returned struct is not linked onto any lists and must be destroyed using
|
||||
* btrfs_free_device.
|
||||
*/
|
||||
static struct btrfs_device *__alloc_device(void)
|
||||
static struct btrfs_device *__alloc_device(struct btrfs_fs_info *fs_info)
|
||||
{
|
||||
struct btrfs_device *dev;
|
||||
|
||||
|
@ -433,7 +433,8 @@ static struct btrfs_device *__alloc_device(void)
|
|||
btrfs_device_data_ordered_init(dev);
|
||||
INIT_RADIX_TREE(&dev->reada_zones, GFP_NOFS & ~__GFP_DIRECT_RECLAIM);
|
||||
INIT_RADIX_TREE(&dev->reada_extents, GFP_NOFS & ~__GFP_DIRECT_RECLAIM);
|
||||
extent_io_tree_init(NULL, &dev->alloc_state, 0, NULL);
|
||||
extent_io_tree_init(fs_info, &dev->alloc_state,
|
||||
IO_TREE_DEVICE_ALLOC_STATE, NULL);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
@ -6532,7 +6533,7 @@ struct btrfs_device *btrfs_alloc_device(struct btrfs_fs_info *fs_info,
|
|||
if (WARN_ON(!devid && !fs_info))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
dev = __alloc_device();
|
||||
dev = __alloc_device(fs_info);
|
||||
if (IS_ERR(dev))
|
||||
return dev;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче