Linux Audio

Check our new training course

Loading...
v6.8
 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
v6.13.7
 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
18struct btrfs_io_context;
19struct btrfs_io_stripe;
20struct btrfs_fs_info;
21struct btrfs_ordered_extent;
22struct btrfs_trans_handle;
23
24int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 length);
25int 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);
28int 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
32int btrfs_insert_one_raid_extent(struct btrfs_trans_handle *trans,
33				 struct btrfs_io_context *bioc);
34#endif
35
36static 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
54static inline int btrfs_num_raid_stripes(u32 item_size)
55{
56	return item_size / sizeof(struct btrfs_raid_stride);
 
57}
58
59#endif