Loading...
Note: File does not exist in v3.1.
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * Copyright (C) 2023 Western Digital Corporation or its affiliates.
4 */
5
6#ifndef BTRFS_RAID_STRIPE_TREE_H
7#define BTRFS_RAID_STRIPE_TREE_H
8
9#define BTRFS_RST_SUPP_BLOCK_GROUP_MASK (BTRFS_BLOCK_GROUP_DUP | \
10 BTRFS_BLOCK_GROUP_RAID1_MASK | \
11 BTRFS_BLOCK_GROUP_RAID0 | \
12 BTRFS_BLOCK_GROUP_RAID10)
13
14struct btrfs_io_context;
15struct btrfs_io_stripe;
16struct btrfs_ordered_extent;
17struct btrfs_trans_handle;
18
19int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 length);
20int btrfs_get_raid_extent_offset(struct btrfs_fs_info *fs_info,
21 u64 logical, u64 *length, u64 map_type,
22 u32 stripe_index, struct btrfs_io_stripe *stripe);
23int btrfs_insert_raid_extent(struct btrfs_trans_handle *trans,
24 struct btrfs_ordered_extent *ordered_extent);
25
26static inline bool btrfs_need_stripe_tree_update(struct btrfs_fs_info *fs_info,
27 u64 map_type)
28{
29 u64 type = map_type & BTRFS_BLOCK_GROUP_TYPE_MASK;
30 u64 profile = map_type & BTRFS_BLOCK_GROUP_PROFILE_MASK;
31
32 if (!btrfs_fs_incompat(fs_info, RAID_STRIPE_TREE))
33 return false;
34
35 if (type != BTRFS_BLOCK_GROUP_DATA)
36 return false;
37
38 if (profile & BTRFS_RST_SUPP_BLOCK_GROUP_MASK)
39 return true;
40
41 return false;
42}
43
44static inline int btrfs_num_raid_stripes(u32 item_size)
45{
46 return (item_size - offsetof(struct btrfs_stripe_extent, strides)) /
47 sizeof(struct btrfs_raid_stride);
48}
49
50#endif