]> Git Repo - J-linux.git/blob - fs/btrfs/raid-stripe-tree.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / fs / btrfs / raid-stripe-tree.h
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 #include <linux/types.h>
10 #include <uapi/linux/btrfs_tree.h>
11 #include "fs.h"
12
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)
17
18 struct btrfs_io_context;
19 struct btrfs_io_stripe;
20 struct btrfs_fs_info;
21 struct btrfs_ordered_extent;
22 struct btrfs_trans_handle;
23
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);
30
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);
34 #endif
35
36 static inline bool btrfs_need_stripe_tree_update(struct btrfs_fs_info *fs_info,
37                                                  u64 map_type)
38 {
39         u64 type = map_type & BTRFS_BLOCK_GROUP_TYPE_MASK;
40         u64 profile = map_type & BTRFS_BLOCK_GROUP_PROFILE_MASK;
41
42         if (!btrfs_fs_incompat(fs_info, RAID_STRIPE_TREE))
43                 return false;
44
45         if (type != BTRFS_BLOCK_GROUP_DATA)
46                 return false;
47
48         if (profile & BTRFS_RST_SUPP_BLOCK_GROUP_MASK)
49                 return true;
50
51         return false;
52 }
53
54 static inline int btrfs_num_raid_stripes(u32 item_size)
55 {
56         return item_size / sizeof(struct btrfs_raid_stride);
57 }
58
59 #endif
This page took 0.027989 seconds and 4 git commands to generate.