Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at nocache-cleanup 60 lines 1.7 kB view raw
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