Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #ifndef BTRFS_BLOCK_RSV_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) #define BTRFS_BLOCK_RSV_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) struct btrfs_trans_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) enum btrfs_reserve_flush_enum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10)  * Types of block reserves
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 	BTRFS_BLOCK_RSV_GLOBAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 	BTRFS_BLOCK_RSV_DELALLOC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 	BTRFS_BLOCK_RSV_TRANS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 	BTRFS_BLOCK_RSV_CHUNK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 	BTRFS_BLOCK_RSV_DELOPS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	BTRFS_BLOCK_RSV_DELREFS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	BTRFS_BLOCK_RSV_EMPTY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	BTRFS_BLOCK_RSV_TEMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) struct btrfs_block_rsv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	u64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	struct btrfs_space_info *space_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	unsigned short full;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 	unsigned short type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	unsigned short failfast;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 	 * Qgroup equivalent for @size @reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 	 * Unlike normal @size/@reserved for inode rsv, qgroup doesn't care
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	 * about things like csum size nor how many tree blocks it will need to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	 * reserve.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	 * Qgroup cares more about net change of the extent usage.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 	 * So for one newly inserted file extent, in worst case it will cause
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 	 * leaf split and level increase, nodesize for each file extent is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 	 * already too much.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	 * In short, qgroup_size/reserved is the upper limit of possible needed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	 * qgroup metadata reservation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	u64 qgroup_rsv_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	u64 qgroup_rsv_reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) void btrfs_init_block_rsv(struct btrfs_block_rsv *rsv, unsigned short type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) struct btrfs_block_rsv *btrfs_alloc_block_rsv(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 					      unsigned short type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) void btrfs_init_metadata_block_rsv(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 				   struct btrfs_block_rsv *rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 				   unsigned short type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) void btrfs_free_block_rsv(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) 			  struct btrfs_block_rsv *rsv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) int btrfs_block_rsv_add(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 			struct btrfs_block_rsv *block_rsv, u64 num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 			enum btrfs_reserve_flush_enum flush);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) int btrfs_block_rsv_check(struct btrfs_block_rsv *block_rsv, int min_factor);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) int btrfs_block_rsv_refill(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 			   struct btrfs_block_rsv *block_rsv, u64 min_reserved,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 			   enum btrfs_reserve_flush_enum flush);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) int btrfs_block_rsv_migrate(struct btrfs_block_rsv *src_rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 			    struct btrfs_block_rsv *dst_rsv, u64 num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 			    bool update_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) int btrfs_block_rsv_use_bytes(struct btrfs_block_rsv *block_rsv, u64 num_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) int btrfs_cond_migrate_bytes(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 			     struct btrfs_block_rsv *dest, u64 num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 			     int min_factor);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) void btrfs_block_rsv_add_bytes(struct btrfs_block_rsv *block_rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 			       u64 num_bytes, bool update_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) u64 btrfs_block_rsv_release(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 			      struct btrfs_block_rsv *block_rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 			      u64 num_bytes, u64 *qgroup_to_release);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) void btrfs_update_global_block_rsv(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) void btrfs_init_global_block_rsv(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) void btrfs_release_global_block_rsv(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) struct btrfs_block_rsv *btrfs_use_block_rsv(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 					    struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 					    u32 blocksize);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) static inline void btrfs_unuse_block_rsv(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 					 struct btrfs_block_rsv *block_rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 					 u32 blocksize)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) 	btrfs_block_rsv_add_bytes(block_rsv, blocksize, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) 	btrfs_block_rsv_release(fs_info, block_rsv, 0, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #endif /* BTRFS_BLOCK_RSV_H */