File Index
Files and directories
Sign in
FILE

raid-stripe-tree.h

File preview with syntax highlighting.

linux-6.19.14/fs/btrfs/raid-stripe-tree.h C
 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#include "accessors.h"
13
14#define BTRFS_RST_SUPP_BLOCK_GROUP_MASK    (BTRFS_BLOCK_GROUP_DUP |		\
15					    BTRFS_BLOCK_GROUP_RAID1_MASK |	\
16					    BTRFS_BLOCK_GROUP_RAID0 |		\
17					    BTRFS_BLOCK_GROUP_RAID10)
18
19struct btrfs_io_context;
20struct btrfs_io_stripe;
21struct btrfs_fs_info;
22struct btrfs_ordered_extent;
23struct btrfs_trans_handle;
24
25int btrfs_delete_raid_extent(struct btrfs_trans_handle *trans, u64 start, u64 length);
26int btrfs_get_raid_extent_offset(struct btrfs_fs_info *fs_info,
27				 u64 logical, u64 *length, u64 map_type,
28				 u32 stripe_index, struct btrfs_io_stripe *stripe);
29int btrfs_insert_raid_extent(struct btrfs_trans_handle *trans,
30			     struct btrfs_ordered_extent *ordered_extent);
31
32#ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
33int btrfs_insert_one_raid_extent(struct btrfs_trans_handle *trans,
34				 struct btrfs_io_context *bioc);
35#endif
36
37static inline bool btrfs_need_stripe_tree_update(struct btrfs_fs_info *fs_info,
38						 u64 map_type)
39{
40	u64 type = map_type & BTRFS_BLOCK_GROUP_TYPE_MASK;
41	u64 profile = map_type & BTRFS_BLOCK_GROUP_PROFILE_MASK;
42
43	if (!btrfs_fs_incompat(fs_info, RAID_STRIPE_TREE))
44		return false;
45
46	if (type != BTRFS_BLOCK_GROUP_DATA)
47		return false;
48
49	if (profile & BTRFS_RST_SUPP_BLOCK_GROUP_MASK)
50		return true;
51
52	return false;
53}
54
55static inline int btrfs_num_raid_stripes(u32 item_size)
56{
57	return item_size / sizeof(struct btrfs_raid_stride);
58}
59
60#endif
~/ Read-only file preview.