1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (C) 2023 Western Digital Corporation or its affiliates.
6 #ifndef BTRFS_RAID_STRIPE_TREE_H
7 #define BTRFS_RAID_STRIPE_TREE_H
9 #include <linux/types.h>
10 #include <uapi/linux/btrfs_tree.h>
13 #define BTRFS_RST_SUPP_BLOCK_GROUP_MASK (BTRFS_BLOCK_GROUP_DUP | \
14 BTRFS_BLOCK_GROUP_RAID1_MASK | \
15 BTRFS_BLOCK_GROUP_RAID0 | \
16 BTRFS_BLOCK_GROUP_RAID10)
18 struct btrfs_io_context
;
19 struct btrfs_io_stripe
;
21 struct btrfs_ordered_extent
;
22 struct btrfs_trans_handle
;
24 int btrfs_delete_raid_extent(struct btrfs_trans_handle
*trans
, u64 start
, u64 length
);
25 int btrfs_get_raid_extent_offset(struct btrfs_fs_info
*fs_info
,
26 u64 logical
, u64
*length
, u64 map_type
,
27 u32 stripe_index
, struct btrfs_io_stripe
*stripe
);
28 int btrfs_insert_raid_extent(struct btrfs_trans_handle
*trans
,
29 struct btrfs_ordered_extent
*ordered_extent
);
31 #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
32 int btrfs_insert_one_raid_extent(struct btrfs_trans_handle
*trans
,
33 struct btrfs_io_context
*bioc
);
36 static inline bool btrfs_need_stripe_tree_update(struct btrfs_fs_info
*fs_info
,
39 u64 type
= map_type
& BTRFS_BLOCK_GROUP_TYPE_MASK
;
40 u64 profile
= map_type
& BTRFS_BLOCK_GROUP_PROFILE_MASK
;
42 if (!btrfs_fs_incompat(fs_info
, RAID_STRIPE_TREE
))
45 if (type
!= BTRFS_BLOCK_GROUP_DATA
)
48 if (profile
& BTRFS_RST_SUPP_BLOCK_GROUP_MASK
)
54 static inline int btrfs_num_raid_stripes(u32 item_size
)
56 return item_size
/ sizeof(struct btrfs_raid_stride
);