brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 1ac1c21 Raw
55 lines · 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_H7#define BTRFS_RAID_STRIPE_TREE_H8 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 31static inline bool btrfs_need_stripe_tree_update(struct btrfs_fs_info *fs_info,32						 u64 map_type)33{34	u64 type = map_type & BTRFS_BLOCK_GROUP_TYPE_MASK;35	u64 profile = map_type & BTRFS_BLOCK_GROUP_PROFILE_MASK;36 37	if (!btrfs_fs_incompat(fs_info, RAID_STRIPE_TREE))38		return false;39 40	if (type != BTRFS_BLOCK_GROUP_DATA)41		return false;42 43	if (profile & BTRFS_RST_SUPP_BLOCK_GROUP_MASK)44		return true;45 46	return false;47}48 49static inline int btrfs_num_raid_stripes(u32 item_size)50{51	return item_size / sizeof(struct btrfs_raid_stride);52}53 54#endif55