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)  * Copyright (C) 2007 Oracle.  All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6) #ifndef BTRFS_CTREE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7) #define BTRFS_CTREE_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9) #include <linux/mm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10) #include <linux/sched/signal.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11) #include <linux/highmem.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12) #include <linux/fs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13) #include <linux/rwsem.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14) #include <linux/semaphore.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15) #include <linux/completion.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16) #include <linux/backing-dev.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17) #include <linux/wait.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19) #include <trace/events/btrfs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20) #include <asm/kmap_types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21) #include <asm/unaligned.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) #include <linux/pagemap.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23) #include <linux/btrfs.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24) #include <linux/btrfs_tree.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25) #include <linux/workqueue.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26) #include <linux/security.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) #include <linux/sizes.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) #include <linux/dynamic_debug.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) #include <linux/refcount.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) #include <linux/crc32c.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) #include "extent-io-tree.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) #include "extent_io.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) #include "extent_map.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) #include "async-thread.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) #include "block-rsv.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) #include "locking.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) struct btrfs_trans_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) struct btrfs_transaction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40) struct btrfs_pending_snapshot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41) struct btrfs_delayed_ref_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42) struct btrfs_space_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43) struct btrfs_block_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) extern struct kmem_cache *btrfs_trans_handle_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) extern struct kmem_cache *btrfs_bit_radix_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) extern struct kmem_cache *btrfs_path_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) extern struct kmem_cache *btrfs_free_space_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) extern struct kmem_cache *btrfs_free_space_bitmap_cachep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49) struct btrfs_ordered_sum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50) struct btrfs_ref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) #define BTRFS_MAGIC 0x4D5F53665248425FULL /* ascii _BHRfS_M, no null */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55)  * Maximum number of mirrors that can be available for all profiles counting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56)  * the target device of dev-replace as one. During an active device replace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57)  * procedure, the target device of the copy operation is a mirror for the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58)  * filesystem data as well that can be used to read data in order to repair
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59)  * read errors on other disks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61)  * Current value is derived from RAID1C4 with 4 copies.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63) #define BTRFS_MAX_MIRRORS (4 + 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) #define BTRFS_MAX_LEVEL 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67) #define BTRFS_OLDEST_GENERATION	0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70)  * the max metadata block size.  This limit is somewhat artificial,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71)  * but the memmove costs go through the roof for larger blocks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73) #define BTRFS_MAX_METADATA_BLOCKSIZE 65536
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76)  * we can actually store much bigger names, but lets not confuse the rest
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77)  * of linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) #define BTRFS_NAME_LEN 255
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82)  * Theoretical limit is larger, but we keep this down to a sane
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83)  * value. That should limit greatly the possibility of collisions on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84)  * inode ref items.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) #define BTRFS_LINK_MAX 65535U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88) #define BTRFS_EMPTY_DIR_SIZE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) /* ioprio of readahead is set to idle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) #define BTRFS_IOPRIO_READA (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) #define BTRFS_DIRTY_METADATA_THRESH	SZ_32M
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96)  * Use large batch size to reduce overhead of metadata updates.  On the reader
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97)  * side, we only read it when we are close to ENOSPC and the read overhead is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98)  * mostly related to the number of CPUs, so it is OK to use arbitrary large
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99)  * value here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) #define BTRFS_TOTAL_BYTES_PINNED_BATCH	SZ_128M
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) #define BTRFS_MAX_EXTENT_SIZE SZ_128M
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106)  * Deltas are an effective way to populate global statistics.  Give macro names
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107)  * to make it clear what we're doing.  An example is discard_extents in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108)  * btrfs_free_space_ctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) #define BTRFS_STAT_NR_ENTRIES	2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) #define BTRFS_STAT_CURR		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) #define BTRFS_STAT_PREV		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115)  * Count how many BTRFS_MAX_EXTENT_SIZE cover the @size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117) static inline u32 count_max_extents(u64 size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) 	return div_u64(size + BTRFS_MAX_EXTENT_SIZE - 1, BTRFS_MAX_EXTENT_SIZE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122) static inline unsigned long btrfs_chunk_item_size(int num_stripes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124) 	BUG_ON(num_stripes == 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125) 	return sizeof(struct btrfs_chunk) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126) 		sizeof(struct btrfs_stripe) * (num_stripes - 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130)  * Runtime (in-memory) states of filesystem
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) 	/* Global indicator of serious filesystem errors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) 	BTRFS_FS_STATE_ERROR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136) 	 * Filesystem is being remounted, allow to skip some operations, like
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137) 	 * defrag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) 	BTRFS_FS_STATE_REMOUNTING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) 	/* Track if a transaction abort has been reported on this filesystem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141) 	BTRFS_FS_STATE_TRANS_ABORTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143) 	 * Bio operations should be blocked on this filesystem because a source
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144) 	 * or target device is being destroyed as part of a device replace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146) 	BTRFS_FS_STATE_DEV_REPLACING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147) 	/* The btrfs_fs_info created for self-tests */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) 	BTRFS_FS_STATE_DUMMY_FS_INFO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151) #define BTRFS_BACKREF_REV_MAX		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152) #define BTRFS_BACKREF_REV_SHIFT		56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) #define BTRFS_BACKREF_REV_MASK		(((u64)BTRFS_BACKREF_REV_MAX - 1) << \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) 					 BTRFS_BACKREF_REV_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156) #define BTRFS_OLD_BACKREF_REV		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157) #define BTRFS_MIXED_BACKREF_REV		1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160)  * every tree block (leaf or node) starts with this header.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162) struct btrfs_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163) 	/* these first four must match the super block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164) 	u8 csum[BTRFS_CSUM_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) 	u8 fsid[BTRFS_FSID_SIZE]; /* FS specific uuid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) 	__le64 bytenr; /* which block this node is supposed to live in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167) 	__le64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) 	/* allowed to be different from the super from here on down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) 	u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171) 	__le64 generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172) 	__le64 owner;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) 	__le32 nritems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) 	u8 level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178)  * this is a very generous portion of the super block, giving us
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179)  * room to translate 14 chunks with 3 stripes each.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) #define BTRFS_SYSTEM_CHUNK_ARRAY_SIZE 2048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184)  * just in case we somehow lose the roots and are not able to mount,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185)  * we store an array of the roots from previous transactions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186)  * in the super.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) #define BTRFS_NUM_BACKUP_ROOTS 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) struct btrfs_root_backup {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190) 	__le64 tree_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191) 	__le64 tree_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) 	__le64 chunk_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) 	__le64 chunk_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) 	__le64 extent_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197) 	__le64 extent_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) 	__le64 fs_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) 	__le64 fs_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) 	__le64 dev_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) 	__le64 dev_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) 	__le64 csum_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) 	__le64 csum_root_gen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) 	__le64 total_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) 	__le64 bytes_used;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) 	__le64 num_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) 	/* future */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) 	__le64 unused_64[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214) 	u8 tree_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215) 	u8 chunk_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216) 	u8 extent_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217) 	u8 fs_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218) 	u8 dev_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219) 	u8 csum_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220) 	/* future and to align */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) 	u8 unused_8[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225)  * the super block basically lists the main trees of the FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226)  * it currently lacks any block count etc etc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228) struct btrfs_super_block {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) 	/* the first 4 fields must match struct btrfs_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) 	u8 csum[BTRFS_CSUM_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) 	/* FS specific UUID, visible to user */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) 	u8 fsid[BTRFS_FSID_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233) 	__le64 bytenr; /* this block number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234) 	__le64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) 	/* allowed to be different from the btrfs_header from here own down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) 	__le64 magic;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) 	__le64 generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) 	__le64 root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240) 	__le64 chunk_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241) 	__le64 log_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243) 	/* this will help find the new super based on the log root */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) 	__le64 log_root_transid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245) 	__le64 total_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246) 	__le64 bytes_used;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247) 	__le64 root_dir_objectid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248) 	__le64 num_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249) 	__le32 sectorsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250) 	__le32 nodesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251) 	__le32 __unused_leafsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252) 	__le32 stripesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) 	__le32 sys_chunk_array_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) 	__le64 chunk_root_generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255) 	__le64 compat_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256) 	__le64 compat_ro_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) 	__le64 incompat_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) 	__le16 csum_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) 	u8 root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) 	u8 chunk_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) 	u8 log_root_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262) 	struct btrfs_dev_item dev_item;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) 	char label[BTRFS_LABEL_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) 	__le64 cache_generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) 	__le64 uuid_tree_generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) 	/* the UUID written into btree blocks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) 	u8 metadata_uuid[BTRFS_FSID_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) 	/* future expansion */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) 	__le64 reserved[28];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) 	u8 sys_chunk_array[BTRFS_SYSTEM_CHUNK_ARRAY_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) 	struct btrfs_root_backup super_roots[BTRFS_NUM_BACKUP_ROOTS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279)  * Compat flags that we support.  If any incompat flags are set other than the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280)  * ones specified below then we will fail to mount
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) #define BTRFS_FEATURE_COMPAT_SUPP		0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) #define BTRFS_FEATURE_COMPAT_SAFE_SET		0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) #define BTRFS_FEATURE_COMPAT_SAFE_CLEAR		0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286) #define BTRFS_FEATURE_COMPAT_RO_SUPP			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) 	(BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE |	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) 	 BTRFS_FEATURE_COMPAT_RO_FREE_SPACE_TREE_VALID)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) #define BTRFS_FEATURE_COMPAT_RO_SAFE_SET	0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) #define BTRFS_FEATURE_COMPAT_RO_SAFE_CLEAR	0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) #define BTRFS_FEATURE_INCOMPAT_SUPP			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) 	(BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) 	 BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL |	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) 	 BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) 	 BTRFS_FEATURE_INCOMPAT_BIG_METADATA |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) 	 BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) 	 BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) 	 BTRFS_FEATURE_INCOMPAT_RAID56 |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301) 	 BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF |		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302) 	 BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA |	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303) 	 BTRFS_FEATURE_INCOMPAT_NO_HOLES	|	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) 	 BTRFS_FEATURE_INCOMPAT_METADATA_UUID	|	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) 	 BTRFS_FEATURE_INCOMPAT_RAID1C34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) #define BTRFS_FEATURE_INCOMPAT_SAFE_SET			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308) 	(BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309) #define BTRFS_FEATURE_INCOMPAT_SAFE_CLEAR		0ULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312)  * A leaf is full of items. offset and size tell us where to find
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313)  * the item in the leaf (relative to the start of the data area)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315) struct btrfs_item {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) 	struct btrfs_disk_key key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) 	__le32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) 	__le32 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322)  * leaves have an item area and a data area:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323)  * [item0, item1....itemN] [free space] [dataN...data1, data0]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325)  * The data is separate from the items to get the keys closer together
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326)  * during searches.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) struct btrfs_leaf {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 	struct btrfs_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) 	struct btrfs_item items[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334)  * all non-leaf blocks are nodes, they hold only keys and pointers to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335)  * other blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337) struct btrfs_key_ptr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338) 	struct btrfs_disk_key key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) 	__le64 blockptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) 	__le64 generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) struct btrfs_node {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) 	struct btrfs_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) 	struct btrfs_key_ptr ptrs[];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) } __attribute__ ((__packed__));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349)  * btrfs_paths remember the path taken from the root down to the leaf.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350)  * level 0 is always the leaf, and nodes[1...BTRFS_MAX_LEVEL] will point
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351)  * to any other levels that are present.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353)  * The slots array records the index of the item or block pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354)  * used while walking the tree.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) enum { READA_NONE, READA_BACK, READA_FORWARD };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) struct btrfs_path {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) 	struct extent_buffer *nodes[BTRFS_MAX_LEVEL];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) 	int slots[BTRFS_MAX_LEVEL];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) 	/* if there is real range locking, this locks field will change */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) 	u8 locks[BTRFS_MAX_LEVEL];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) 	u8 reada;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) 	/* keep some upper locks as we walk down */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) 	u8 lowest_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) 	 * set by btrfs_split_item, tells search_slot to keep all locks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) 	 * and to force calls to keep space in the nodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) 	unsigned int search_for_split:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) 	unsigned int keep_locks:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) 	unsigned int skip_locking:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) 	unsigned int leave_spinning:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) 	unsigned int search_commit_root:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) 	unsigned int need_commit_sem:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) 	unsigned int skip_release_on_error:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) 	unsigned int recurse:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379) #define BTRFS_MAX_EXTENT_ITEM_SIZE(r) ((BTRFS_LEAF_DATA_SIZE(r->fs_info) >> 4) - \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380) 					sizeof(struct btrfs_item))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381) struct btrfs_dev_replace {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) 	u64 replace_state;	/* see #define above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) 	time64_t time_started;	/* seconds since 1-Jan-1970 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384) 	time64_t time_stopped;	/* seconds since 1-Jan-1970 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385) 	atomic64_t num_write_errors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386) 	atomic64_t num_uncorrectable_read_errors;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) 	u64 cursor_left;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) 	u64 committed_cursor_left;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390) 	u64 cursor_left_last_write_of_item;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391) 	u64 cursor_right;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393) 	u64 cont_reading_from_srcdev_mode;	/* see #define above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395) 	int is_valid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) 	int item_needs_writeback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) 	struct btrfs_device *srcdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) 	struct btrfs_device *tgtdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400) 	struct mutex lock_finishing_cancel_unmount;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401) 	struct rw_semaphore rwsem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) 	struct btrfs_scrub_progress scrub_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) 	struct percpu_counter bio_counter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) 	wait_queue_head_t replace_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410)  * free clusters are used to claim free space in relatively large chunks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411)  * allowing us to do less seeky writes. They are used for all metadata
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412)  * allocations. In ssd_spread mode they are also used for data allocations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) struct btrfs_free_cluster {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) 	spinlock_t refill_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417) 	struct rb_root root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) 	/* largest extent in this cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) 	u64 max_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) 	/* first extent starting offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) 	u64 window_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) 	/* We did a full search and couldn't create a cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) 	bool fragmented;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) 	struct btrfs_block_group *block_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) 	 * when a cluster is allocated from a block group, we put the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431) 	 * cluster onto a list in the block group so that it can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432) 	 * be freed before the block group is freed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434) 	struct list_head block_group_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) enum btrfs_caching_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) 	BTRFS_CACHE_NO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) 	BTRFS_CACHE_STARTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) 	BTRFS_CACHE_FAST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) 	BTRFS_CACHE_FINISHED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) 	BTRFS_CACHE_ERROR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446)  * Tree to record all locked full stripes of a RAID5/6 block group
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) struct btrfs_full_stripe_locks_tree {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) 	struct rb_root root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) 	struct mutex lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) /* Discard control. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455)  * Async discard uses multiple lists to differentiate the discard filter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456)  * parameters.  Index 0 is for completely free block groups where we need to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457)  * ensure the entire block group is trimmed without being lossy.  Indices
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458)  * afterwards represent monotonically decreasing discard filter sizes to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459)  * prioritize what should be discarded next.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) #define BTRFS_NR_DISCARD_LISTS		3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) #define BTRFS_DISCARD_INDEX_UNUSED	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) #define BTRFS_DISCARD_INDEX_START	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465) struct btrfs_discard_ctl {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466) 	struct workqueue_struct *discard_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 	struct delayed_work work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469) 	struct btrfs_block_group *block_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470) 	struct list_head discard_list[BTRFS_NR_DISCARD_LISTS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471) 	u64 prev_discard;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472) 	atomic_t discardable_extents;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) 	atomic64_t discardable_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) 	u64 max_discard_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) 	unsigned long delay;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476) 	u32 iops_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477) 	u32 kbps_limit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478) 	u64 discard_extent_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479) 	u64 discard_bitmap_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480) 	atomic64_t discard_bytes_saved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483) /* delayed seq elem */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484) struct seq_list {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) 	u64 seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489) #define SEQ_LIST_INIT(name)	{ .list = LIST_HEAD_INIT((name).list), .seq = 0 }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491) #define SEQ_LAST	((u64)-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) enum btrfs_orphan_cleanup_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494) 	ORPHAN_CLEANUP_STARTED	= 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495) 	ORPHAN_CLEANUP_DONE	= 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498) void btrfs_init_async_reclaim_work(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500) /* fs_info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501) struct reloc_control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502) struct btrfs_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503) struct btrfs_fs_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504) struct btrfs_balance_control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505) struct btrfs_delayed_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508)  * Block group or device which contains an active swapfile. Used for preventing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509)  * unsafe operations while a swapfile is active.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511)  * These are sorted on (ptr, inode) (note that a block group or device can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512)  * contain more than one swapfile). We compare the pointer values because we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513)  * don't actually care what the object is, we just need a quick check whether
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514)  * the object exists in the rbtree.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) struct btrfs_swapfile_pin {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) 	struct rb_node node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) 	void *ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) 	struct inode *inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521) 	 * If true, ptr points to a struct btrfs_block_group. Otherwise, ptr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522) 	 * points to a struct btrfs_device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524) 	bool is_block_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) 	 * Only used when 'is_block_group' is true and it is the number of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) 	 * extents used by a swapfile for this block group ('ptr' field).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) 	int bg_extent_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *fs_info, void *ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535) 	BTRFS_FS_BARRIER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536) 	BTRFS_FS_CLOSING_START,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) 	BTRFS_FS_CLOSING_DONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) 	BTRFS_FS_LOG_RECOVERING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) 	BTRFS_FS_OPEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) 	BTRFS_FS_QUOTA_ENABLED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) 	BTRFS_FS_UPDATE_UUID_TREE_GEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) 	BTRFS_FS_CREATING_FREE_SPACE_TREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) 	BTRFS_FS_BTREE_ERR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) 	BTRFS_FS_LOG1_ERR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) 	BTRFS_FS_LOG2_ERR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) 	BTRFS_FS_QUOTA_OVERRIDE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) 	/* Used to record internally whether fs has been frozen */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) 	BTRFS_FS_FROZEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) 	 * Indicate that balance has been set up from the ioctl and is in the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) 	 * main phase. The fs_info::balance_ctl is initialized.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) 	 * Set and cleared while holding fs_info::balance_mutex.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) 	BTRFS_FS_BALANCE_RUNNING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556) 	/* Indicate that the cleaner thread is awake and doing something. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557) 	BTRFS_FS_CLEANER_RUNNING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) 	 * The checksumming has an optimized version and is considered fast,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) 	 * so we don't need to offload checksums to workqueues.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) 	BTRFS_FS_CSUM_IMPL_FAST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) 	/* Indicate that the discard workqueue can service discards. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566) 	BTRFS_FS_DISCARD_RUNNING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) 	/* Indicate that we can't trust the free space tree for caching yet */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) 	BTRFS_FS_FREE_SPACE_TREE_UNTRUSTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573)  * Exclusive operations (device replace, resize, device add/remove, balance)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) enum btrfs_exclusive_operation {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) 	BTRFS_EXCLOP_NONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) 	BTRFS_EXCLOP_BALANCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) 	BTRFS_EXCLOP_DEV_ADD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) 	BTRFS_EXCLOP_DEV_REMOVE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) 	BTRFS_EXCLOP_DEV_REPLACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) 	BTRFS_EXCLOP_RESIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) 	BTRFS_EXCLOP_SWAP_ACTIVATE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) struct btrfs_fs_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) 	u8 chunk_tree_uuid[BTRFS_UUID_SIZE];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) 	unsigned long flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) 	struct btrfs_root *extent_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589) 	struct btrfs_root *tree_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590) 	struct btrfs_root *chunk_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591) 	struct btrfs_root *dev_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) 	struct btrfs_root *fs_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) 	struct btrfs_root *csum_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594) 	struct btrfs_root *quota_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595) 	struct btrfs_root *uuid_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) 	struct btrfs_root *free_space_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) 	struct btrfs_root *data_reloc_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) 	/* the log root tree is a directory of all the other log roots */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) 	struct btrfs_root *log_root_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) 	spinlock_t fs_roots_radix_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603) 	struct radix_tree_root fs_roots_radix;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) 	/* block group cache stuff */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) 	spinlock_t block_group_cache_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) 	u64 first_logical_byte;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) 	struct rb_root block_group_cache_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610) 	/* keep track of unallocated space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611) 	atomic64_t free_chunk_space;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) 	/* Track ranges which are used by log trees blocks/logged data extents */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) 	struct extent_io_tree excluded_extents;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) 	/* logical->physical extent mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) 	struct extent_map_tree mapping_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) 	 * block reservation for extent, checksum, root tree and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) 	 * delayed dir index item
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) 	struct btrfs_block_rsv global_block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624) 	/* block reservation for metadata operations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625) 	struct btrfs_block_rsv trans_block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) 	/* block reservation for chunk tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) 	struct btrfs_block_rsv chunk_block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) 	/* block reservation for delayed operations */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) 	struct btrfs_block_rsv delayed_block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) 	/* block reservation for delayed refs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) 	struct btrfs_block_rsv delayed_refs_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633) 	struct btrfs_block_rsv empty_block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) 	u64 generation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) 	u64 last_trans_committed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) 	u64 avg_delayed_ref_runtime;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) 	 * this is updated to the current trans every time a full commit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) 	 * is required instead of the faster short fsync log commits
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) 	u64 last_trans_log_full_commit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) 	unsigned long mount_opt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) 	 * Track requests for actions that need to be done during transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) 	 * commit (like for some mount options).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) 	unsigned long pending_changes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650) 	unsigned long compress_type:4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651) 	unsigned int compress_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) 	u32 commit_interval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) 	 * It is a suggestive number, the read side is safe even it gets a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655) 	 * wrong number because we will write out the data into a regular
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656) 	 * extent. The write side(mount/remount) is under ->s_umount lock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657) 	 * so it is also safe.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) 	u64 max_inline;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) 	struct btrfs_transaction *running_transaction;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) 	wait_queue_head_t transaction_throttle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) 	wait_queue_head_t transaction_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) 	wait_queue_head_t transaction_blocked_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) 	wait_queue_head_t async_submit_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) 	 * Used to protect the incompat_flags, compat_flags, compat_ro_flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669) 	 * when they are updated.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) 	 * Because we do not clear the flags for ever, so we needn't use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) 	 * the lock on the read side.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) 	 * We also needn't use the lock when we mount the fs, because
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675) 	 * there is no other task which will update the flag.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) 	spinlock_t super_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) 	struct btrfs_super_block *super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) 	struct btrfs_super_block *super_for_commit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) 	struct super_block *sb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) 	struct inode *btree_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) 	struct mutex tree_log_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) 	struct mutex transaction_kthread_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684) 	struct mutex cleaner_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685) 	struct mutex chunk_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) 	 * this is taken to make sure we don't set block groups ro after
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) 	 * the free space cache has been allocated on them
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) 	struct mutex ro_block_group_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) 	/* this is used during read/modify/write to make sure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) 	 * no two ios are trying to mod the same stripe at the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) 	 * time
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697) 	struct btrfs_stripe_hash_table *stripe_hash_table;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) 	 * this protects the ordered operations list only while we are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) 	 * processing all of the entries on it.  This way we make
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) 	 * sure the commit code doesn't find the list temporarily empty
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) 	 * because another function happens to be doing non-waiting preflush
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) 	 * before jumping into the main commit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706) 	struct mutex ordered_operations_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) 	struct rw_semaphore commit_root_sem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710) 	struct rw_semaphore cleanup_work_sem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 	struct rw_semaphore subvol_sem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) 	spinlock_t trans_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) 	 * the reloc mutex goes with the trans lock, it is taken
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) 	 * during commit to protect us from the relocation code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) 	struct mutex reloc_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721) 	struct list_head trans_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) 	struct list_head dead_roots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723) 	struct list_head caching_block_groups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) 	spinlock_t delayed_iput_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) 	struct list_head delayed_iputs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) 	atomic_t nr_delayed_iputs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728) 	wait_queue_head_t delayed_iputs_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 	atomic64_t tree_mod_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732) 	/* this protects tree_mod_log and tree_mod_seq_list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733) 	rwlock_t tree_mod_log_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) 	struct rb_root tree_mod_log;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) 	struct list_head tree_mod_seq_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) 	atomic_t async_delalloc_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) 	 * this is used to protect the following list -- ordered_roots.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) 	spinlock_t ordered_root_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745) 	 * all fs/file tree roots in which there are data=ordered extents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) 	 * pending writeback are added into this list.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) 	 * these can span multiple transactions and basically include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) 	 * every dirty data page that isn't from nodatacow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) 	struct list_head ordered_roots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753) 	struct mutex delalloc_root_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754) 	spinlock_t delalloc_root_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755) 	/* all fs/file tree roots that have delalloc inodes. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756) 	struct list_head delalloc_roots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759) 	 * there is a pool of worker threads for checksumming during writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) 	 * and a pool for checksumming after reads.  This is because readers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) 	 * can run with FS locks held, and the writers may be waiting for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) 	 * those locks.  We don't want ordering in the pending list to cause
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) 	 * deadlocks, and so the two are serviced separately.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 	 * A third pool does submit_bio to avoid deadlocking with the other
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) 	 * two
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768) 	struct btrfs_workqueue *workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) 	struct btrfs_workqueue *delalloc_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) 	struct btrfs_workqueue *flush_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) 	struct btrfs_workqueue *endio_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) 	struct btrfs_workqueue *endio_meta_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) 	struct btrfs_workqueue *endio_raid56_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) 	struct btrfs_workqueue *rmw_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) 	struct btrfs_workqueue *endio_meta_write_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) 	struct btrfs_workqueue *endio_write_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777) 	struct btrfs_workqueue *endio_freespace_worker;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778) 	struct btrfs_workqueue *caching_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779) 	struct btrfs_workqueue *readahead_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782) 	 * fixup workers take dirty pages that didn't properly go through
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783) 	 * the cow mechanism and make them safe to write.  It happens
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784) 	 * for the sys_munmap function call path
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) 	struct btrfs_workqueue *fixup_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) 	struct btrfs_workqueue *delayed_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) 	struct task_struct *transaction_kthread;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790) 	struct task_struct *cleaner_kthread;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791) 	u32 thread_pool_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) 	struct kobject *space_info_kobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794) 	struct kobject *qgroups_kobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796) 	u64 total_pinned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798) 	/* used to keep from writing metadata until there is a nice batch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799) 	struct percpu_counter dirty_metadata_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800) 	struct percpu_counter delalloc_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801) 	struct percpu_counter dio_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) 	s32 dirty_metadata_batch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803) 	s32 delalloc_batch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805) 	struct list_head dirty_cowonly_roots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807) 	struct btrfs_fs_devices *fs_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) 	 * The space_info list is effectively read only after initial
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811) 	 * setup.  It is populated at mount time and cleaned up after
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812) 	 * all block groups are removed.  RCU is used to protect it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) 	struct list_head space_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) 	struct btrfs_space_info *data_sinfo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) 	struct reloc_control *reloc_ctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) 	/* data_alloc_cluster is only used in ssd_spread mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) 	struct btrfs_free_cluster data_alloc_cluster;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823) 	/* all metadata allocations go through this cluster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824) 	struct btrfs_free_cluster meta_alloc_cluster;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) 	/* auto defrag inodes go here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) 	spinlock_t defrag_inodes_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) 	struct rb_root defrag_inodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) 	atomic_t defrag_running;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) 	/* Used to protect avail_{data, metadata, system}_alloc_bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) 	seqlock_t profiles_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834) 	 * these three are in extended format (availability of single
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) 	 * chunks is denoted by BTRFS_AVAIL_ALLOC_BIT_SINGLE bit, other
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) 	 * types are denoted by corresponding BTRFS_BLOCK_GROUP_* bits)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) 	u64 avail_data_alloc_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839) 	u64 avail_metadata_alloc_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840) 	u64 avail_system_alloc_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) 	/* restriper state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) 	spinlock_t balance_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) 	struct mutex balance_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) 	atomic_t balance_pause_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) 	atomic_t balance_cancel_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) 	struct btrfs_balance_control *balance_ctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) 	wait_queue_head_t balance_wait_q;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 	u32 data_chunk_allocations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) 	u32 metadata_ratio;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853) 	void *bdev_holder;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) 	/* private scrub information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) 	struct mutex scrub_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) 	atomic_t scrubs_running;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) 	atomic_t scrub_pause_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) 	atomic_t scrubs_paused;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) 	atomic_t scrub_cancel_req;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) 	wait_queue_head_t scrub_pause_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) 	 * The worker pointers are NULL iff the refcount is 0, ie. scrub is not
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) 	 * running.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866) 	refcount_t scrub_workers_refcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867) 	struct btrfs_workqueue *scrub_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) 	struct btrfs_workqueue *scrub_wr_completion_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) 	struct btrfs_workqueue *scrub_parity_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) 	struct btrfs_discard_ctl discard_ctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) #ifdef CONFIG_BTRFS_FS_CHECK_INTEGRITY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) 	u32 check_integrity_print_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876) 	/* is qgroup tracking in a consistent state? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877) 	u64 qgroup_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) 	/* holds configuration and tracking. Protected by qgroup_lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) 	struct rb_root qgroup_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) 	spinlock_t qgroup_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) 	 * used to avoid frequently calling ulist_alloc()/ulist_free()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) 	 * when doing qgroup accounting, it must be protected by qgroup_lock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) 	struct ulist *qgroup_ulist;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890) 	 * Protect user change for quota operations. If a transaction is needed,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) 	 * it must be started before locking this lock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) 	struct mutex qgroup_ioctl_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) 	/* list of dirty qgroups to be written at next commit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) 	struct list_head dirty_qgroups;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898) 	/* used by qgroup for an efficient tree traversal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899) 	u64 qgroup_seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901) 	/* qgroup rescan items */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902) 	struct mutex qgroup_rescan_lock; /* protects the progress item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) 	struct btrfs_key qgroup_rescan_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) 	struct btrfs_workqueue *qgroup_rescan_workers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) 	struct completion qgroup_rescan_completion;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) 	struct btrfs_work qgroup_rescan_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) 	bool qgroup_rescan_running;	/* protected by qgroup_rescan_lock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909) 	/* filesystem state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910) 	unsigned long fs_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) 	struct btrfs_delayed_root *delayed_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) 	/* readahead tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) 	spinlock_t reada_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) 	struct radix_tree_root reada_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) 	/* readahead works cnt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) 	atomic_t reada_works_cnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) 	/* Extent buffer radix tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) 	spinlock_t buffer_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923) 	struct radix_tree_root buffer_radix;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925) 	/* next backup root to be overwritten */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926) 	int backup_root_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928) 	/* device replace state */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929) 	struct btrfs_dev_replace dev_replace;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931) 	struct semaphore uuid_tree_rescan_sem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 	/* Used to reclaim the metadata space in the background. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) 	struct work_struct async_reclaim_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) 	struct work_struct async_data_reclaim_work;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 	spinlock_t unused_bgs_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) 	struct list_head unused_bgs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939) 	struct mutex unused_bg_unpin_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940) 	struct mutex delete_unused_bgs_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942) 	/* Cached block sizes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943) 	u32 nodesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944) 	u32 sectorsize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945) 	u32 stripesize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947) 	/* Block groups and devices containing active swapfiles. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) 	spinlock_t swapfile_pins_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949) 	struct rb_root swapfile_pins;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) 	struct crypto_shash *csum_shash;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) 	 * Number of send operations in progress.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) 	 * Updated while holding fs_info::balance_mutex.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957) 	int send_in_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) 	/* Type of exclusive operation running */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) 	unsigned long exclusive_operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962) #ifdef CONFIG_BTRFS_FS_REF_VERIFY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963) 	spinlock_t ref_verify_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964) 	struct rb_root block_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) #ifdef CONFIG_BTRFS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) 	struct kobject *debug_kobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) 	struct kobject *discard_debug_kobj;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) 	struct list_head allocated_roots;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) 	spinlock_t eb_leak_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) 	struct list_head allocated_ebs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) static inline struct btrfs_fs_info *btrfs_sb(struct super_block *sb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) 	return sb->s_fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983)  * The state of btrfs root
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 	 * btrfs_record_root_in_trans is a multi-step process, and it can race
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) 	 * with the balancing code.   But the race is very small, and only the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	 * first time the root is added to each transaction.  So IN_TRANS_SETUP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) 	 * is used to tell us when more checks are required
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) 	BTRFS_ROOT_IN_TRANS_SETUP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995) 	 * Set if tree blocks of this root can be shared by other roots.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996) 	 * Only subvolume trees and their reloc trees have this bit set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 	 * Conflicts with TRACK_DIRTY bit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 	 * This affects two things:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) 	 * - How balance works
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 	 *   For shareable roots, we need to use reloc tree and do path
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 	 *   replacement for balance, and need various pre/post hooks for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) 	 *   snapshot creation to handle them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 	 *   While for non-shareable trees, we just simply do a tree search
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 	 *   with COW.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 	 * - How dirty roots are tracked
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) 	 *   For shareable roots, btrfs_record_root_in_trans() is needed to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 	 *   track them, while non-subvolume roots have TRACK_DIRTY bit, they
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) 	 *   don't need to set this manually.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) 	BTRFS_ROOT_SHAREABLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) 	BTRFS_ROOT_TRACK_DIRTY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 	BTRFS_ROOT_IN_RADIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) 	BTRFS_ROOT_ORPHAN_ITEM_INSERTED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) 	BTRFS_ROOT_DEFRAG_RUNNING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) 	BTRFS_ROOT_FORCE_COW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) 	BTRFS_ROOT_MULTI_LOG_TASKS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) 	BTRFS_ROOT_DIRTY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) 	BTRFS_ROOT_DELETING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 	 * Reloc tree is orphan, only kept here for qgroup delayed subtree scan
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) 	 * Set for the subvolume tree owning the reloc tree.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 	BTRFS_ROOT_DEAD_RELOC_TREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) 	/* Mark dead root stored on device whose cleanup needs to be resumed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 	BTRFS_ROOT_DEAD_TREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 	/* The root has a log tree. Used only for subvolume roots. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 	BTRFS_ROOT_HAS_LOG_TREE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 	/* Qgroup flushing is in progress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) 	BTRFS_ROOT_QGROUP_FLUSHING,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039)  * Record swapped tree blocks of a subvolume tree for delayed subtree trace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040)  * code. For detail check comment in fs/btrfs/qgroup.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) struct btrfs_qgroup_swapped_blocks {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) 	/* RM_EMPTY_ROOT() of above blocks[] */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) 	bool swapped;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 	struct rb_root blocks[BTRFS_MAX_LEVEL];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050)  * in ram representation of the tree.  extent_root is used for all allocations
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051)  * and for the extent tree extent_root root.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) struct btrfs_root {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) 	struct extent_buffer *node;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) 	struct extent_buffer *commit_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) 	struct btrfs_root *log_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) 	struct btrfs_root *reloc_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) 	unsigned long state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 	struct btrfs_root_item root_item;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) 	struct btrfs_key root_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) 	struct btrfs_fs_info *fs_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) 	struct extent_io_tree dirty_log_pages;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) 	struct mutex objectid_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) 	spinlock_t accounting_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) 	struct btrfs_block_rsv *block_rsv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) 	/* free ino cache stuff */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) 	struct btrfs_free_space_ctl *free_ino_ctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) 	enum btrfs_caching_type ino_cache_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) 	spinlock_t ino_cache_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 	wait_queue_head_t ino_cache_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	struct btrfs_free_space_ctl *free_ino_pinned;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) 	u64 ino_cache_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) 	struct inode *ino_cache_inode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	struct mutex log_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 	wait_queue_head_t log_writer_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) 	wait_queue_head_t log_commit_wait[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 	struct list_head log_ctxs[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 	/* Used only for log trees of subvolumes, not for the log root tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 	atomic_t log_writers;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 	atomic_t log_commit[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 	/* Used only for log trees of subvolumes, not for the log root tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 	atomic_t log_batch;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 	int log_transid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) 	/* No matter the commit succeeds or not*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) 	int log_transid_committed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) 	/* Just be updated when the commit succeeds. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) 	int last_log_commit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) 	pid_t log_start_pid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) 	u64 last_trans;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) 	u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) 	u64 highest_objectid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) 	struct btrfs_key defrag_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) 	struct btrfs_key defrag_max;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) 	/* The dirty list is only used by non-shareable roots */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) 	struct list_head dirty_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) 	struct list_head root_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) 	spinlock_t log_extents_lock[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) 	struct list_head logged_list[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) 	int orphan_cleanup_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) 	spinlock_t inode_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) 	/* red-black tree that keeps track of in-memory inodes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) 	struct rb_root inode_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) 	 * radix tree that keeps track of delayed nodes of every inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) 	 * protected by inode_lock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) 	struct radix_tree_root delayed_nodes_tree;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) 	 * right now this just gets used so that a root has its own devid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 	 * for stat.  It may be used for more later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 	dev_t anon_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) 	spinlock_t root_item_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) 	refcount_t refs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) 	struct mutex delalloc_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) 	spinlock_t delalloc_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) 	 * all of the inodes that have delalloc bytes.  It is possible for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) 	 * this list to be empty even when there is still dirty data=ordered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) 	 * extents waiting to finish IO.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140) 	struct list_head delalloc_inodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141) 	struct list_head delalloc_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) 	u64 nr_delalloc_inodes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) 	struct mutex ordered_extent_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) 	 * this is used by the balancing code to wait for all the pending
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) 	 * ordered extents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) 	spinlock_t ordered_extent_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) 	 * all of the data=ordered extents pending writeback
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) 	 * these can span multiple transactions and basically include
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) 	 * every dirty data page that isn't from nodatacow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) 	struct list_head ordered_extents;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) 	struct list_head ordered_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) 	u64 nr_ordered_extents;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) 	 * Not empty if this subvolume root has gone through tree block swap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) 	 * (relocation)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) 	 * Will be used by reloc_control::dirty_subvol_roots.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) 	struct list_head reloc_dirty_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) 	 * Number of currently running SEND ioctls to prevent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) 	 * manipulation with the read-only status via SUBVOL_SETFLAGS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) 	int send_in_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) 	 * Number of currently running deduplication operations that have a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) 	 * destination inode belonging to this root. Protected by the lock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) 	 * root_item_lock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) 	int dedupe_in_progress;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) 	/* For exclusion of snapshot creation and nocow writes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) 	struct btrfs_drew_lock snapshot_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) 	atomic_t snapshot_force_cow;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 	/* For qgroup metadata reserved space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) 	spinlock_t qgroup_meta_rsv_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) 	u64 qgroup_meta_rsv_pertrans;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187) 	u64 qgroup_meta_rsv_prealloc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188) 	wait_queue_head_t qgroup_flush_wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190) 	/* Number of active swapfiles */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191) 	atomic_t nr_swapfiles;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) 	/* Record pairs of swapped blocks for qgroup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 	struct btrfs_qgroup_swapped_blocks swapped_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) 	/* Used only by log trees, when logging csum items */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) 	struct extent_io_tree log_csum_range;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) 	u64 alloc_bytenr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) #ifdef CONFIG_BTRFS_DEBUG
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 	struct list_head leak_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209)  * Structure that conveys information about an extent that is going to replace
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210)  * all the extents in a file range.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) struct btrfs_replace_extent_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) 	u64 disk_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) 	u64 disk_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215) 	u64 data_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216) 	u64 data_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 	u64 file_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) 	/* Pointer to a file extent item of type regular or prealloc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 	char *extent_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) 	 * Set to true when attempting to replace a file range with a new extent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) 	 * described by this structure, set to false when attempting to clone an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) 	 * existing extent into a file range.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) 	bool is_new_extent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) 	/* Meaningful only if is_new_extent is true. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) 	int qgroup_reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) 	 * Meaningful only if is_new_extent is true.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) 	 * Used to track how many extent items we have already inserted in a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) 	 * subvolume tree that refer to the extent described by this structure,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) 	 * so that we know when to create a new delayed ref or update an existing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) 	 * one.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) 	int insertions;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) struct btrfs_file_private {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) 	void *filldir_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) static inline u32 BTRFS_LEAF_DATA_SIZE(const struct btrfs_fs_info *info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) 	return info->nodesize - sizeof(struct btrfs_header);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) #define BTRFS_LEAF_DATA_OFFSET		offsetof(struct btrfs_leaf, items)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) static inline u32 BTRFS_MAX_ITEM_SIZE(const struct btrfs_fs_info *info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) 	return BTRFS_LEAF_DATA_SIZE(info) - sizeof(struct btrfs_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) static inline u32 BTRFS_NODEPTRS_PER_BLOCK(const struct btrfs_fs_info *info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) 	return BTRFS_LEAF_DATA_SIZE(info) / sizeof(struct btrfs_key_ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) #define BTRFS_FILE_EXTENT_INLINE_DATA_START		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) 		(offsetof(struct btrfs_file_extent_item, disk_bytenr))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) static inline u32 BTRFS_MAX_INLINE_DATA_SIZE(const struct btrfs_fs_info *info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) 	return BTRFS_MAX_ITEM_SIZE(info) -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) 	       BTRFS_FILE_EXTENT_INLINE_DATA_START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) static inline u32 BTRFS_MAX_XATTR_SIZE(const struct btrfs_fs_info *info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) 	return BTRFS_MAX_ITEM_SIZE(info) - sizeof(struct btrfs_dir_item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275)  * Flags for mount options.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277)  * Note: don't forget to add new options to btrfs_show_options()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) #define BTRFS_MOUNT_NODATASUM		(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) #define BTRFS_MOUNT_NODATACOW		(1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) #define BTRFS_MOUNT_NOBARRIER		(1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) #define BTRFS_MOUNT_SSD			(1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) #define BTRFS_MOUNT_DEGRADED		(1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) #define BTRFS_MOUNT_COMPRESS		(1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) #define BTRFS_MOUNT_NOTREELOG           (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) #define BTRFS_MOUNT_FLUSHONCOMMIT       (1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) #define BTRFS_MOUNT_SSD_SPREAD		(1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) #define BTRFS_MOUNT_NOSSD		(1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) #define BTRFS_MOUNT_DISCARD_SYNC	(1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) #define BTRFS_MOUNT_FORCE_COMPRESS      (1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) #define BTRFS_MOUNT_SPACE_CACHE		(1 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) #define BTRFS_MOUNT_CLEAR_CACHE		(1 << 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) #define BTRFS_MOUNT_USER_SUBVOL_RM_ALLOWED (1 << 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) #define BTRFS_MOUNT_ENOSPC_DEBUG	 (1 << 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) #define BTRFS_MOUNT_AUTO_DEFRAG		(1 << 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) #define BTRFS_MOUNT_INODE_MAP_CACHE	(1 << 17)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) #define BTRFS_MOUNT_USEBACKUPROOT	(1 << 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) #define BTRFS_MOUNT_SKIP_BALANCE	(1 << 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) #define BTRFS_MOUNT_CHECK_INTEGRITY	(1 << 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) #define BTRFS_MOUNT_CHECK_INTEGRITY_INCLUDING_EXTENT_DATA (1 << 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) #define BTRFS_MOUNT_PANIC_ON_FATAL_ERROR	(1 << 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) #define BTRFS_MOUNT_RESCAN_UUID_TREE	(1 << 23)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) #define BTRFS_MOUNT_FRAGMENT_DATA	(1 << 24)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) #define BTRFS_MOUNT_FRAGMENT_METADATA	(1 << 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) #define BTRFS_MOUNT_FREE_SPACE_TREE	(1 << 26)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) #define BTRFS_MOUNT_NOLOGREPLAY		(1 << 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) #define BTRFS_MOUNT_REF_VERIFY		(1 << 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) #define BTRFS_MOUNT_DISCARD_ASYNC	(1 << 29)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) #define BTRFS_DEFAULT_COMMIT_INTERVAL	(30)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) #define BTRFS_DEFAULT_MAX_INLINE	(2048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) #define btrfs_clear_opt(o, opt)		((o) &= ~BTRFS_MOUNT_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) #define btrfs_set_opt(o, opt)		((o) |= BTRFS_MOUNT_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) #define btrfs_raw_test_opt(o, opt)	((o) & BTRFS_MOUNT_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) #define btrfs_test_opt(fs_info, opt)	((fs_info)->mount_opt & \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) 					 BTRFS_MOUNT_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) #define btrfs_set_and_info(fs_info, opt, fmt, args...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) do {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) 	if (!btrfs_test_opt(fs_info, opt))				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) 		btrfs_info(fs_info, fmt, ##args);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) 	btrfs_set_opt(fs_info->mount_opt, opt);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) #define btrfs_clear_and_info(fs_info, opt, fmt, args...)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) do {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) 	if (btrfs_test_opt(fs_info, opt))				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) 		btrfs_info(fs_info, fmt, ##args);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) 	btrfs_clear_opt(fs_info->mount_opt, opt);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334)  * Requests for changes that need to be done during transaction commit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336)  * Internal mount options that are used for special handling of the real
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337)  * mount options (eg. cannot be set during remount and have to be set during
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338)  * transaction commit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) #define BTRFS_PENDING_SET_INODE_MAP_CACHE	(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) #define BTRFS_PENDING_CLEAR_INODE_MAP_CACHE	(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) #define BTRFS_PENDING_COMMIT			(2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) #define btrfs_test_pending(info, opt)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) 	test_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) #define btrfs_set_pending(info, opt)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) 	set_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) #define btrfs_clear_pending(info, opt)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) 	clear_bit(BTRFS_PENDING_##opt, &(info)->pending_changes)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353)  * Helpers for setting pending mount option changes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355)  * Expects corresponding macros
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356)  * BTRFS_PENDING_SET_ and CLEAR_ + short mount option name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) #define btrfs_set_pending_and_info(info, opt, fmt, args...)            \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) do {                                                                   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360)        if (!btrfs_raw_test_opt((info)->mount_opt, opt)) {              \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361)                btrfs_info((info), fmt, ##args);                        \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362)                btrfs_set_pending((info), SET_##opt);                   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363)                btrfs_clear_pending((info), CLEAR_##opt);               \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364)        }                                                               \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) } while(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367) #define btrfs_clear_pending_and_info(info, opt, fmt, args...)          \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368) do {                                                                   \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369)        if (btrfs_raw_test_opt((info)->mount_opt, opt)) {               \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370)                btrfs_info((info), fmt, ##args);                        \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371)                btrfs_set_pending((info), CLEAR_##opt);                 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372)                btrfs_clear_pending((info), SET_##opt);                 \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373)        }                                                               \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) } while(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377)  * Inode flags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) #define BTRFS_INODE_NODATASUM		(1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) #define BTRFS_INODE_NODATACOW		(1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) #define BTRFS_INODE_READONLY		(1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) #define BTRFS_INODE_NOCOMPRESS		(1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383) #define BTRFS_INODE_PREALLOC		(1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384) #define BTRFS_INODE_SYNC		(1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385) #define BTRFS_INODE_IMMUTABLE		(1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386) #define BTRFS_INODE_APPEND		(1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387) #define BTRFS_INODE_NODUMP		(1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) #define BTRFS_INODE_NOATIME		(1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) #define BTRFS_INODE_DIRSYNC		(1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) #define BTRFS_INODE_COMPRESS		(1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) #define BTRFS_INODE_ROOT_ITEM_INIT	(1 << 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) #define BTRFS_INODE_FLAG_MASK						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) 	(BTRFS_INODE_NODATASUM |					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) 	 BTRFS_INODE_NODATACOW |					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) 	 BTRFS_INODE_READONLY |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 	 BTRFS_INODE_NOCOMPRESS |					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) 	 BTRFS_INODE_PREALLOC |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) 	 BTRFS_INODE_SYNC |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 	 BTRFS_INODE_IMMUTABLE |					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) 	 BTRFS_INODE_APPEND |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) 	 BTRFS_INODE_NODUMP |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) 	 BTRFS_INODE_NOATIME |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) 	 BTRFS_INODE_DIRSYNC |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) 	 BTRFS_INODE_COMPRESS |						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) 	 BTRFS_INODE_ROOT_ITEM_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) struct btrfs_map_token {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) 	struct extent_buffer *eb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) 	char *kaddr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) 	unsigned long offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) #define BTRFS_BYTES_TO_BLKS(fs_info, bytes) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) 				((bytes) >> (fs_info)->sb->s_blocksize_bits)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418) static inline void btrfs_init_map_token(struct btrfs_map_token *token,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419) 					struct extent_buffer *eb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) 	token->eb = eb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) 	token->kaddr = page_address(eb->pages[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) 	token->offset = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) /* some macros to generate set/get functions for the struct fields.  This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427)  * assumes there is a lefoo_to_cpu for every type, so lets make a simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428)  * one for u8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) #define le8_to_cpu(v) (v)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) #define cpu_to_le8(v) (v)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) #define __le8 u8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) static inline u8 get_unaligned_le8(const void *p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436)        return *(u8 *)p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) static inline void put_unaligned_le8(u8 val, void *p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441)        *(u8 *)p = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) #define read_eb_member(eb, ptr, type, member, result) (\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) 	read_extent_buffer(eb, (char *)(result),			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) 			   ((unsigned long)(ptr)) +			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) 			    offsetof(type, member),			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) 			   sizeof(((type *)0)->member)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) #define write_eb_member(eb, ptr, type, member, result) (\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) 	write_extent_buffer(eb, (char *)(result),			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) 			   ((unsigned long)(ptr)) +			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) 			    offsetof(type, member),			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) 			   sizeof(((type *)0)->member)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) #define DECLARE_BTRFS_SETGET_BITS(bits)					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) u##bits btrfs_get_token_##bits(struct btrfs_map_token *token,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) 			       const void *ptr, unsigned long off);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) void btrfs_set_token_##bits(struct btrfs_map_token *token,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460) 			    const void *ptr, unsigned long off,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461) 			    u##bits val);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462) u##bits btrfs_get_##bits(const struct extent_buffer *eb,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463) 			 const void *ptr, unsigned long off);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464) void btrfs_set_##bits(const struct extent_buffer *eb, void *ptr,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) 		      unsigned long off, u##bits val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) DECLARE_BTRFS_SETGET_BITS(8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) DECLARE_BTRFS_SETGET_BITS(16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) DECLARE_BTRFS_SETGET_BITS(32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) DECLARE_BTRFS_SETGET_BITS(64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) #define BTRFS_SETGET_FUNCS(name, type, member, bits)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) static inline u##bits btrfs_##name(const struct extent_buffer *eb,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) 				   const type *s)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 	BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) 	return btrfs_get_##bits(eb, s, offsetof(type, member));		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) }									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) static inline void btrfs_set_##name(const struct extent_buffer *eb, type *s, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) 				    u##bits val)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) 	BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) 	btrfs_set_##bits(eb, s, offsetof(type, member), val);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) }									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) static inline u##bits btrfs_token_##name(struct btrfs_map_token *token,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) 					 const type *s)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) 	BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) 	return btrfs_get_token_##bits(token, s, offsetof(type, member));\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) }									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) static inline void btrfs_set_token_##name(struct btrfs_map_token *token,\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) 					  type *s, u##bits val)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) 	BUILD_BUG_ON(sizeof(u##bits) != sizeof(((type *)0))->member);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) 	btrfs_set_token_##bits(token, s, offsetof(type, member), val);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) #define BTRFS_SETGET_HEADER_FUNCS(name, type, member, bits)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) static inline u##bits btrfs_##name(const struct extent_buffer *eb)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) 	const type *p = page_address(eb->pages[0]);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) 	return get_unaligned_le##bits(&p->member);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) }									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) static inline void btrfs_set_##name(const struct extent_buffer *eb,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) 				    u##bits val)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) 	type *p = page_address(eb->pages[0]);				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) 	put_unaligned_le##bits(val, &p->member);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) #define BTRFS_SETGET_STACK_FUNCS(name, type, member, bits)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) static inline u##bits btrfs_##name(const type *s)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) 	return get_unaligned_le##bits(&s->member);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) }									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) static inline void btrfs_set_##name(type *s, u##bits val)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) 	put_unaligned_le##bits(val, &s->member);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) static inline u64 btrfs_device_total_bytes(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) 					   struct btrfs_dev_item *s)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) 	BUILD_BUG_ON(sizeof(u64) !=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) 		     sizeof(((struct btrfs_dev_item *)0))->total_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) 	return btrfs_get_64(eb, s, offsetof(struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) 					    total_bytes));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) static inline void btrfs_set_device_total_bytes(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) 						struct btrfs_dev_item *s,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) 						u64 val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) 	BUILD_BUG_ON(sizeof(u64) !=
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) 		     sizeof(((struct btrfs_dev_item *)0))->total_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) 	WARN_ON(!IS_ALIGNED(val, eb->fs_info->sectorsize));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) 	btrfs_set_64(eb, s, offsetof(struct btrfs_dev_item, total_bytes), val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) BTRFS_SETGET_FUNCS(device_type, struct btrfs_dev_item, type, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) BTRFS_SETGET_FUNCS(device_bytes_used, struct btrfs_dev_item, bytes_used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) BTRFS_SETGET_FUNCS(device_io_align, struct btrfs_dev_item, io_align, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) BTRFS_SETGET_FUNCS(device_io_width, struct btrfs_dev_item, io_width, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) BTRFS_SETGET_FUNCS(device_start_offset, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) 		   start_offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) BTRFS_SETGET_FUNCS(device_sector_size, struct btrfs_dev_item, sector_size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) BTRFS_SETGET_FUNCS(device_id, struct btrfs_dev_item, devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) BTRFS_SETGET_FUNCS(device_group, struct btrfs_dev_item, dev_group, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) BTRFS_SETGET_FUNCS(device_seek_speed, struct btrfs_dev_item, seek_speed, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) BTRFS_SETGET_FUNCS(device_bandwidth, struct btrfs_dev_item, bandwidth, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) BTRFS_SETGET_FUNCS(device_generation, struct btrfs_dev_item, generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) BTRFS_SETGET_STACK_FUNCS(stack_device_type, struct btrfs_dev_item, type, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) BTRFS_SETGET_STACK_FUNCS(stack_device_total_bytes, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) 			 total_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556) BTRFS_SETGET_STACK_FUNCS(stack_device_bytes_used, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557) 			 bytes_used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558) BTRFS_SETGET_STACK_FUNCS(stack_device_io_align, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559) 			 io_align, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560) BTRFS_SETGET_STACK_FUNCS(stack_device_io_width, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) 			 io_width, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) BTRFS_SETGET_STACK_FUNCS(stack_device_sector_size, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) 			 sector_size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) BTRFS_SETGET_STACK_FUNCS(stack_device_id, struct btrfs_dev_item, devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) BTRFS_SETGET_STACK_FUNCS(stack_device_group, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) 			 dev_group, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) BTRFS_SETGET_STACK_FUNCS(stack_device_seek_speed, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) 			 seek_speed, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) BTRFS_SETGET_STACK_FUNCS(stack_device_bandwidth, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) 			 bandwidth, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) BTRFS_SETGET_STACK_FUNCS(stack_device_generation, struct btrfs_dev_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) static inline unsigned long btrfs_device_uuid(struct btrfs_dev_item *d)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) 	return (unsigned long)d + offsetof(struct btrfs_dev_item, uuid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) static inline unsigned long btrfs_device_fsid(struct btrfs_dev_item *d)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) 	return (unsigned long)d + offsetof(struct btrfs_dev_item, fsid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) BTRFS_SETGET_FUNCS(chunk_length, struct btrfs_chunk, length, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) BTRFS_SETGET_FUNCS(chunk_owner, struct btrfs_chunk, owner, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) BTRFS_SETGET_FUNCS(chunk_stripe_len, struct btrfs_chunk, stripe_len, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) BTRFS_SETGET_FUNCS(chunk_io_align, struct btrfs_chunk, io_align, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) BTRFS_SETGET_FUNCS(chunk_io_width, struct btrfs_chunk, io_width, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) BTRFS_SETGET_FUNCS(chunk_sector_size, struct btrfs_chunk, sector_size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) BTRFS_SETGET_FUNCS(chunk_type, struct btrfs_chunk, type, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) BTRFS_SETGET_FUNCS(chunk_num_stripes, struct btrfs_chunk, num_stripes, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) BTRFS_SETGET_FUNCS(chunk_sub_stripes, struct btrfs_chunk, sub_stripes, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) BTRFS_SETGET_FUNCS(stripe_devid, struct btrfs_stripe, devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) BTRFS_SETGET_FUNCS(stripe_offset, struct btrfs_stripe, offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) static inline char *btrfs_stripe_dev_uuid(struct btrfs_stripe *s)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) 	return (char *)s + offsetof(struct btrfs_stripe, dev_uuid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) BTRFS_SETGET_STACK_FUNCS(stack_chunk_length, struct btrfs_chunk, length, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) BTRFS_SETGET_STACK_FUNCS(stack_chunk_owner, struct btrfs_chunk, owner, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) BTRFS_SETGET_STACK_FUNCS(stack_chunk_stripe_len, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) 			 stripe_len, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_align, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) 			 io_align, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) BTRFS_SETGET_STACK_FUNCS(stack_chunk_io_width, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) 			 io_width, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) BTRFS_SETGET_STACK_FUNCS(stack_chunk_sector_size, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) 			 sector_size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) BTRFS_SETGET_STACK_FUNCS(stack_chunk_type, struct btrfs_chunk, type, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) BTRFS_SETGET_STACK_FUNCS(stack_chunk_num_stripes, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) 			 num_stripes, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) BTRFS_SETGET_STACK_FUNCS(stack_chunk_sub_stripes, struct btrfs_chunk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) 			 sub_stripes, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) BTRFS_SETGET_STACK_FUNCS(stack_stripe_devid, struct btrfs_stripe, devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) BTRFS_SETGET_STACK_FUNCS(stack_stripe_offset, struct btrfs_stripe, offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) static inline struct btrfs_stripe *btrfs_stripe_nr(struct btrfs_chunk *c,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) 						   int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) 	unsigned long offset = (unsigned long)c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) 	offset += offsetof(struct btrfs_chunk, stripe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) 	offset += nr * sizeof(struct btrfs_stripe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) 	return (struct btrfs_stripe *)offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) static inline char *btrfs_stripe_dev_uuid_nr(struct btrfs_chunk *c, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) 	return btrfs_stripe_dev_uuid(btrfs_stripe_nr(c, nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) static inline u64 btrfs_stripe_offset_nr(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) 					 struct btrfs_chunk *c, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) 	return btrfs_stripe_offset(eb, btrfs_stripe_nr(c, nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) static inline u64 btrfs_stripe_devid_nr(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) 					 struct btrfs_chunk *c, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) 	return btrfs_stripe_devid(eb, btrfs_stripe_nr(c, nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) /* struct btrfs_block_group_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) BTRFS_SETGET_STACK_FUNCS(stack_block_group_used, struct btrfs_block_group_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) 			 used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) BTRFS_SETGET_FUNCS(block_group_used, struct btrfs_block_group_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) 			 used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) BTRFS_SETGET_STACK_FUNCS(stack_block_group_chunk_objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) 			struct btrfs_block_group_item, chunk_objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653) BTRFS_SETGET_FUNCS(block_group_chunk_objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654) 		   struct btrfs_block_group_item, chunk_objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655) BTRFS_SETGET_FUNCS(block_group_flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656) 		   struct btrfs_block_group_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) BTRFS_SETGET_STACK_FUNCS(stack_block_group_flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) 			struct btrfs_block_group_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) /* struct btrfs_free_space_info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) BTRFS_SETGET_FUNCS(free_space_extent_count, struct btrfs_free_space_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) 		   extent_count, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) BTRFS_SETGET_FUNCS(free_space_flags, struct btrfs_free_space_info, flags, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) /* struct btrfs_inode_ref */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666) BTRFS_SETGET_FUNCS(inode_ref_name_len, struct btrfs_inode_ref, name_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667) BTRFS_SETGET_FUNCS(inode_ref_index, struct btrfs_inode_ref, index, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669) /* struct btrfs_inode_extref */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670) BTRFS_SETGET_FUNCS(inode_extref_parent, struct btrfs_inode_extref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671) 		   parent_objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672) BTRFS_SETGET_FUNCS(inode_extref_name_len, struct btrfs_inode_extref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) 		   name_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) BTRFS_SETGET_FUNCS(inode_extref_index, struct btrfs_inode_extref, index, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) /* struct btrfs_inode_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) BTRFS_SETGET_FUNCS(inode_generation, struct btrfs_inode_item, generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) BTRFS_SETGET_FUNCS(inode_sequence, struct btrfs_inode_item, sequence, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679) BTRFS_SETGET_FUNCS(inode_transid, struct btrfs_inode_item, transid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680) BTRFS_SETGET_FUNCS(inode_size, struct btrfs_inode_item, size, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681) BTRFS_SETGET_FUNCS(inode_nbytes, struct btrfs_inode_item, nbytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682) BTRFS_SETGET_FUNCS(inode_block_group, struct btrfs_inode_item, block_group, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683) BTRFS_SETGET_FUNCS(inode_nlink, struct btrfs_inode_item, nlink, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) BTRFS_SETGET_FUNCS(inode_uid, struct btrfs_inode_item, uid, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) BTRFS_SETGET_FUNCS(inode_gid, struct btrfs_inode_item, gid, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) BTRFS_SETGET_FUNCS(inode_mode, struct btrfs_inode_item, mode, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) BTRFS_SETGET_FUNCS(inode_rdev, struct btrfs_inode_item, rdev, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) BTRFS_SETGET_FUNCS(inode_flags, struct btrfs_inode_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) BTRFS_SETGET_STACK_FUNCS(stack_inode_generation, struct btrfs_inode_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) BTRFS_SETGET_STACK_FUNCS(stack_inode_sequence, struct btrfs_inode_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) 			 sequence, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) BTRFS_SETGET_STACK_FUNCS(stack_inode_transid, struct btrfs_inode_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) 			 transid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) BTRFS_SETGET_STACK_FUNCS(stack_inode_size, struct btrfs_inode_item, size, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) BTRFS_SETGET_STACK_FUNCS(stack_inode_nbytes, struct btrfs_inode_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) 			 nbytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) BTRFS_SETGET_STACK_FUNCS(stack_inode_block_group, struct btrfs_inode_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) 			 block_group, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) BTRFS_SETGET_STACK_FUNCS(stack_inode_nlink, struct btrfs_inode_item, nlink, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) BTRFS_SETGET_STACK_FUNCS(stack_inode_uid, struct btrfs_inode_item, uid, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) BTRFS_SETGET_STACK_FUNCS(stack_inode_gid, struct btrfs_inode_item, gid, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) BTRFS_SETGET_STACK_FUNCS(stack_inode_mode, struct btrfs_inode_item, mode, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) BTRFS_SETGET_STACK_FUNCS(stack_inode_rdev, struct btrfs_inode_item, rdev, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) BTRFS_SETGET_STACK_FUNCS(stack_inode_flags, struct btrfs_inode_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) BTRFS_SETGET_FUNCS(timespec_sec, struct btrfs_timespec, sec, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) BTRFS_SETGET_FUNCS(timespec_nsec, struct btrfs_timespec, nsec, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708) BTRFS_SETGET_STACK_FUNCS(stack_timespec_sec, struct btrfs_timespec, sec, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709) BTRFS_SETGET_STACK_FUNCS(stack_timespec_nsec, struct btrfs_timespec, nsec, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) /* struct btrfs_dev_extent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) BTRFS_SETGET_FUNCS(dev_extent_chunk_tree, struct btrfs_dev_extent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) 		   chunk_tree, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) BTRFS_SETGET_FUNCS(dev_extent_chunk_objectid, struct btrfs_dev_extent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) 		   chunk_objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) BTRFS_SETGET_FUNCS(dev_extent_chunk_offset, struct btrfs_dev_extent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) 		   chunk_offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) BTRFS_SETGET_FUNCS(dev_extent_length, struct btrfs_dev_extent, length, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) BTRFS_SETGET_FUNCS(extent_refs, struct btrfs_extent_item, refs, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) BTRFS_SETGET_FUNCS(extent_generation, struct btrfs_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) BTRFS_SETGET_FUNCS(extent_flags, struct btrfs_extent_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) BTRFS_SETGET_FUNCS(tree_block_level, struct btrfs_tree_block_info, level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) static inline void btrfs_tree_block_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) 					struct btrfs_tree_block_info *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) 					struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) 	read_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) static inline void btrfs_set_tree_block_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) 					    struct btrfs_tree_block_info *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) 					    struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) 	write_eb_member(eb, item, struct btrfs_tree_block_info, key, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) BTRFS_SETGET_FUNCS(extent_data_ref_root, struct btrfs_extent_data_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) 		   root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) BTRFS_SETGET_FUNCS(extent_data_ref_objectid, struct btrfs_extent_data_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) 		   objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) BTRFS_SETGET_FUNCS(extent_data_ref_offset, struct btrfs_extent_data_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1745) 		   offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1746) BTRFS_SETGET_FUNCS(extent_data_ref_count, struct btrfs_extent_data_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1747) 		   count, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1748) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1749) BTRFS_SETGET_FUNCS(shared_data_ref_count, struct btrfs_shared_data_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1750) 		   count, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1752) BTRFS_SETGET_FUNCS(extent_inline_ref_type, struct btrfs_extent_inline_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1753) 		   type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1754) BTRFS_SETGET_FUNCS(extent_inline_ref_offset, struct btrfs_extent_inline_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1755) 		   offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1756) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1757) static inline u32 btrfs_extent_inline_ref_size(int type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1758) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1759) 	if (type == BTRFS_TREE_BLOCK_REF_KEY ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1760) 	    type == BTRFS_SHARED_BLOCK_REF_KEY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1761) 		return sizeof(struct btrfs_extent_inline_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1762) 	if (type == BTRFS_SHARED_DATA_REF_KEY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1763) 		return sizeof(struct btrfs_shared_data_ref) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1764) 		       sizeof(struct btrfs_extent_inline_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1765) 	if (type == BTRFS_EXTENT_DATA_REF_KEY)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1766) 		return sizeof(struct btrfs_extent_data_ref) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1767) 		       offsetof(struct btrfs_extent_inline_ref, offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1768) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1769) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1770) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1771) /* struct btrfs_node */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1772) BTRFS_SETGET_FUNCS(key_blockptr, struct btrfs_key_ptr, blockptr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1773) BTRFS_SETGET_FUNCS(key_generation, struct btrfs_key_ptr, generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1774) BTRFS_SETGET_STACK_FUNCS(stack_key_blockptr, struct btrfs_key_ptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1775) 			 blockptr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1776) BTRFS_SETGET_STACK_FUNCS(stack_key_generation, struct btrfs_key_ptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1777) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1778) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1779) static inline u64 btrfs_node_blockptr(const struct extent_buffer *eb, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1780) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1781) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1782) 	ptr = offsetof(struct btrfs_node, ptrs) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1783) 		sizeof(struct btrfs_key_ptr) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1784) 	return btrfs_key_blockptr(eb, (struct btrfs_key_ptr *)ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1785) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1786) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1787) static inline void btrfs_set_node_blockptr(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1788) 					   int nr, u64 val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1789) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1790) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1791) 	ptr = offsetof(struct btrfs_node, ptrs) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1792) 		sizeof(struct btrfs_key_ptr) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1793) 	btrfs_set_key_blockptr(eb, (struct btrfs_key_ptr *)ptr, val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1794) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1795) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1796) static inline u64 btrfs_node_ptr_generation(const struct extent_buffer *eb, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1797) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1798) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1799) 	ptr = offsetof(struct btrfs_node, ptrs) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1800) 		sizeof(struct btrfs_key_ptr) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1801) 	return btrfs_key_generation(eb, (struct btrfs_key_ptr *)ptr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1802) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1803) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1804) static inline void btrfs_set_node_ptr_generation(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1805) 						 int nr, u64 val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1806) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1807) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1808) 	ptr = offsetof(struct btrfs_node, ptrs) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1809) 		sizeof(struct btrfs_key_ptr) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1810) 	btrfs_set_key_generation(eb, (struct btrfs_key_ptr *)ptr, val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1811) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1812) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1813) static inline unsigned long btrfs_node_key_ptr_offset(int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1814) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1815) 	return offsetof(struct btrfs_node, ptrs) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1816) 		sizeof(struct btrfs_key_ptr) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1817) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1818) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1819) void btrfs_node_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1820) 		    struct btrfs_disk_key *disk_key, int nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1821) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1822) static inline void btrfs_set_node_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1823) 				      struct btrfs_disk_key *disk_key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1824) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1825) 	unsigned long ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1826) 	ptr = btrfs_node_key_ptr_offset(nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1827) 	write_eb_member(eb, (struct btrfs_key_ptr *)ptr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1828) 		       struct btrfs_key_ptr, key, disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1829) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1830) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1831) /* struct btrfs_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1832) BTRFS_SETGET_FUNCS(item_offset, struct btrfs_item, offset, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1833) BTRFS_SETGET_FUNCS(item_size, struct btrfs_item, size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1834) BTRFS_SETGET_STACK_FUNCS(stack_item_offset, struct btrfs_item, offset, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1835) BTRFS_SETGET_STACK_FUNCS(stack_item_size, struct btrfs_item, size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1836) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1837) static inline unsigned long btrfs_item_nr_offset(int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1838) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1839) 	return offsetof(struct btrfs_leaf, items) +
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1840) 		sizeof(struct btrfs_item) * nr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1841) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1842) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1843) static inline struct btrfs_item *btrfs_item_nr(int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1844) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1845) 	return (struct btrfs_item *)btrfs_item_nr_offset(nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1846) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1847) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1848) static inline u32 btrfs_item_end(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1849) 				 struct btrfs_item *item)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1850) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1851) 	return btrfs_item_offset(eb, item) + btrfs_item_size(eb, item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1852) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1853) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1854) static inline u32 btrfs_item_end_nr(const struct extent_buffer *eb, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1855) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1856) 	return btrfs_item_end(eb, btrfs_item_nr(nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1857) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1858) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1859) static inline u32 btrfs_item_offset_nr(const struct extent_buffer *eb, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1860) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1861) 	return btrfs_item_offset(eb, btrfs_item_nr(nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1862) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1863) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1864) static inline u32 btrfs_item_size_nr(const struct extent_buffer *eb, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1865) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1866) 	return btrfs_item_size(eb, btrfs_item_nr(nr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1867) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1868) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1869) static inline void btrfs_item_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1870) 			   struct btrfs_disk_key *disk_key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1871) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1872) 	struct btrfs_item *item = btrfs_item_nr(nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1873) 	read_eb_member(eb, item, struct btrfs_item, key, disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1874) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1875) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1876) static inline void btrfs_set_item_key(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1877) 			       struct btrfs_disk_key *disk_key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1878) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1879) 	struct btrfs_item *item = btrfs_item_nr(nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1880) 	write_eb_member(eb, item, struct btrfs_item, key, disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1881) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1882) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1883) BTRFS_SETGET_FUNCS(dir_log_end, struct btrfs_dir_log_item, end, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1885) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1886)  * struct btrfs_root_ref
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1887)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1888) BTRFS_SETGET_FUNCS(root_ref_dirid, struct btrfs_root_ref, dirid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1889) BTRFS_SETGET_FUNCS(root_ref_sequence, struct btrfs_root_ref, sequence, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1890) BTRFS_SETGET_FUNCS(root_ref_name_len, struct btrfs_root_ref, name_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1891) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1892) /* struct btrfs_dir_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1893) BTRFS_SETGET_FUNCS(dir_data_len, struct btrfs_dir_item, data_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1894) BTRFS_SETGET_FUNCS(dir_type, struct btrfs_dir_item, type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1895) BTRFS_SETGET_FUNCS(dir_name_len, struct btrfs_dir_item, name_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1896) BTRFS_SETGET_FUNCS(dir_transid, struct btrfs_dir_item, transid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1897) BTRFS_SETGET_STACK_FUNCS(stack_dir_type, struct btrfs_dir_item, type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1898) BTRFS_SETGET_STACK_FUNCS(stack_dir_data_len, struct btrfs_dir_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1899) 			 data_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1900) BTRFS_SETGET_STACK_FUNCS(stack_dir_name_len, struct btrfs_dir_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1901) 			 name_len, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1902) BTRFS_SETGET_STACK_FUNCS(stack_dir_transid, struct btrfs_dir_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1903) 			 transid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1904) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1905) static inline void btrfs_dir_item_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1906) 				      const struct btrfs_dir_item *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1907) 				      struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1908) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1909) 	read_eb_member(eb, item, struct btrfs_dir_item, location, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1910) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1911) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1912) static inline void btrfs_set_dir_item_key(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1913) 					  struct btrfs_dir_item *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1914) 					  const struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1915) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1916) 	write_eb_member(eb, item, struct btrfs_dir_item, location, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1917) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1918) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1919) BTRFS_SETGET_FUNCS(free_space_entries, struct btrfs_free_space_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1920) 		   num_entries, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1921) BTRFS_SETGET_FUNCS(free_space_bitmaps, struct btrfs_free_space_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1922) 		   num_bitmaps, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1923) BTRFS_SETGET_FUNCS(free_space_generation, struct btrfs_free_space_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1924) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1925) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1926) static inline void btrfs_free_space_key(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1927) 					const struct btrfs_free_space_header *h,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1928) 					struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1929) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1930) 	read_eb_member(eb, h, struct btrfs_free_space_header, location, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1931) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1932) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1933) static inline void btrfs_set_free_space_key(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1934) 					    struct btrfs_free_space_header *h,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1935) 					    const struct btrfs_disk_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1936) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1937) 	write_eb_member(eb, h, struct btrfs_free_space_header, location, key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1938) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1939) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1940) /* struct btrfs_disk_key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1941) BTRFS_SETGET_STACK_FUNCS(disk_key_objectid, struct btrfs_disk_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1942) 			 objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1943) BTRFS_SETGET_STACK_FUNCS(disk_key_offset, struct btrfs_disk_key, offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1944) BTRFS_SETGET_STACK_FUNCS(disk_key_type, struct btrfs_disk_key, type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1945) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1946) #ifdef __LITTLE_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1947) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1948) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1949)  * Optimized helpers for little-endian architectures where CPU and on-disk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1950)  * structures have the same endianness and we can skip conversions.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1951)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1953) static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1954) 					 const struct btrfs_disk_key *disk_key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1955) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1956) 	memcpy(cpu_key, disk_key, sizeof(struct btrfs_key));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1957) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1958) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1959) static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1960) 					 const struct btrfs_key *cpu_key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1961) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1962) 	memcpy(disk_key, cpu_key, sizeof(struct btrfs_key));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1963) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1964) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1965) static inline void btrfs_node_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1966) 					 struct btrfs_key *cpu_key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1967) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1968) 	struct btrfs_disk_key *disk_key = (struct btrfs_disk_key *)cpu_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1969) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1970) 	btrfs_node_key(eb, disk_key, nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1971) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1972) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1973) static inline void btrfs_item_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1974) 					 struct btrfs_key *cpu_key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1975) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1976) 	struct btrfs_disk_key *disk_key = (struct btrfs_disk_key *)cpu_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1977) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1978) 	btrfs_item_key(eb, disk_key, nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1979) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1980) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1981) static inline void btrfs_dir_item_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1982) 					     const struct btrfs_dir_item *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1983) 					     struct btrfs_key *cpu_key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1984) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1985) 	struct btrfs_disk_key *disk_key = (struct btrfs_disk_key *)cpu_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1986) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1987) 	btrfs_dir_item_key(eb, item, disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1988) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1989) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1990) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1991) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1992) static inline void btrfs_disk_key_to_cpu(struct btrfs_key *cpu,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1993) 					 const struct btrfs_disk_key *disk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1994) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1995) 	cpu->offset = le64_to_cpu(disk->offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1996) 	cpu->type = disk->type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1997) 	cpu->objectid = le64_to_cpu(disk->objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1998) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1999) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2000) static inline void btrfs_cpu_key_to_disk(struct btrfs_disk_key *disk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2001) 					 const struct btrfs_key *cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2002) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2003) 	disk->offset = cpu_to_le64(cpu->offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2004) 	disk->type = cpu->type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2005) 	disk->objectid = cpu_to_le64(cpu->objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2006) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2007) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2008) static inline void btrfs_node_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2009) 					 struct btrfs_key *key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2010) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2011) 	struct btrfs_disk_key disk_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2012) 	btrfs_node_key(eb, &disk_key, nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2013) 	btrfs_disk_key_to_cpu(key, &disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2014) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2015) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2016) static inline void btrfs_item_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2017) 					 struct btrfs_key *key, int nr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2018) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2019) 	struct btrfs_disk_key disk_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2020) 	btrfs_item_key(eb, &disk_key, nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2021) 	btrfs_disk_key_to_cpu(key, &disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2022) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2023) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2024) static inline void btrfs_dir_item_key_to_cpu(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2025) 					     const struct btrfs_dir_item *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2026) 					     struct btrfs_key *key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2027) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2028) 	struct btrfs_disk_key disk_key;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2029) 	btrfs_dir_item_key(eb, item, &disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2030) 	btrfs_disk_key_to_cpu(key, &disk_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2031) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2032) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2033) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2034) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2035) /* struct btrfs_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2036) BTRFS_SETGET_HEADER_FUNCS(header_bytenr, struct btrfs_header, bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2037) BTRFS_SETGET_HEADER_FUNCS(header_generation, struct btrfs_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2038) 			  generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2039) BTRFS_SETGET_HEADER_FUNCS(header_owner, struct btrfs_header, owner, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2040) BTRFS_SETGET_HEADER_FUNCS(header_nritems, struct btrfs_header, nritems, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2041) BTRFS_SETGET_HEADER_FUNCS(header_flags, struct btrfs_header, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2042) BTRFS_SETGET_HEADER_FUNCS(header_level, struct btrfs_header, level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2043) BTRFS_SETGET_STACK_FUNCS(stack_header_generation, struct btrfs_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2044) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2045) BTRFS_SETGET_STACK_FUNCS(stack_header_owner, struct btrfs_header, owner, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2046) BTRFS_SETGET_STACK_FUNCS(stack_header_nritems, struct btrfs_header,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2047) 			 nritems, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2048) BTRFS_SETGET_STACK_FUNCS(stack_header_bytenr, struct btrfs_header, bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2049) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2050) static inline int btrfs_header_flag(const struct extent_buffer *eb, u64 flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2051) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2052) 	return (btrfs_header_flags(eb) & flag) == flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2053) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2054) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2055) static inline void btrfs_set_header_flag(struct extent_buffer *eb, u64 flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2056) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2057) 	u64 flags = btrfs_header_flags(eb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2058) 	btrfs_set_header_flags(eb, flags | flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2059) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2060) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2061) static inline void btrfs_clear_header_flag(struct extent_buffer *eb, u64 flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2062) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2063) 	u64 flags = btrfs_header_flags(eb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2064) 	btrfs_set_header_flags(eb, flags & ~flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2065) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2066) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2067) static inline int btrfs_header_backref_rev(const struct extent_buffer *eb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2068) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2069) 	u64 flags = btrfs_header_flags(eb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2070) 	return flags >> BTRFS_BACKREF_REV_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2071) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2072) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2073) static inline void btrfs_set_header_backref_rev(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2074) 						int rev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2075) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2076) 	u64 flags = btrfs_header_flags(eb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2077) 	flags &= ~BTRFS_BACKREF_REV_MASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2078) 	flags |= (u64)rev << BTRFS_BACKREF_REV_SHIFT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2079) 	btrfs_set_header_flags(eb, flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2080) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2081) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2082) static inline int btrfs_is_leaf(const struct extent_buffer *eb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2083) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2084) 	return btrfs_header_level(eb) == 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2085) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2086) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2087) /* struct btrfs_root_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2088) BTRFS_SETGET_FUNCS(disk_root_generation, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2089) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2090) BTRFS_SETGET_FUNCS(disk_root_refs, struct btrfs_root_item, refs, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2091) BTRFS_SETGET_FUNCS(disk_root_bytenr, struct btrfs_root_item, bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2092) BTRFS_SETGET_FUNCS(disk_root_level, struct btrfs_root_item, level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2093) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2094) BTRFS_SETGET_STACK_FUNCS(root_generation, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2095) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2096) BTRFS_SETGET_STACK_FUNCS(root_bytenr, struct btrfs_root_item, bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2097) BTRFS_SETGET_STACK_FUNCS(root_level, struct btrfs_root_item, level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2098) BTRFS_SETGET_STACK_FUNCS(root_dirid, struct btrfs_root_item, root_dirid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2099) BTRFS_SETGET_STACK_FUNCS(root_refs, struct btrfs_root_item, refs, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2100) BTRFS_SETGET_STACK_FUNCS(root_flags, struct btrfs_root_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2101) BTRFS_SETGET_STACK_FUNCS(root_used, struct btrfs_root_item, bytes_used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2102) BTRFS_SETGET_STACK_FUNCS(root_limit, struct btrfs_root_item, byte_limit, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2103) BTRFS_SETGET_STACK_FUNCS(root_last_snapshot, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2104) 			 last_snapshot, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2105) BTRFS_SETGET_STACK_FUNCS(root_generation_v2, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2106) 			 generation_v2, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2107) BTRFS_SETGET_STACK_FUNCS(root_ctransid, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2108) 			 ctransid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2109) BTRFS_SETGET_STACK_FUNCS(root_otransid, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2110) 			 otransid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2111) BTRFS_SETGET_STACK_FUNCS(root_stransid, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2112) 			 stransid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2113) BTRFS_SETGET_STACK_FUNCS(root_rtransid, struct btrfs_root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2114) 			 rtransid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2116) static inline bool btrfs_root_readonly(const struct btrfs_root *root)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2117) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2118) 	return (root->root_item.flags & cpu_to_le64(BTRFS_ROOT_SUBVOL_RDONLY)) != 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2119) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2121) static inline bool btrfs_root_dead(const struct btrfs_root *root)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2122) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2123) 	return (root->root_item.flags & cpu_to_le64(BTRFS_ROOT_SUBVOL_DEAD)) != 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2126) /* struct btrfs_root_backup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2127) BTRFS_SETGET_STACK_FUNCS(backup_tree_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2128) 		   tree_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2129) BTRFS_SETGET_STACK_FUNCS(backup_tree_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2130) 		   tree_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2131) BTRFS_SETGET_STACK_FUNCS(backup_tree_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2132) 		   tree_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2134) BTRFS_SETGET_STACK_FUNCS(backup_chunk_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2135) 		   chunk_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2136) BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2137) 		   chunk_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2138) BTRFS_SETGET_STACK_FUNCS(backup_chunk_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2139) 		   chunk_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2141) BTRFS_SETGET_STACK_FUNCS(backup_extent_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2142) 		   extent_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2143) BTRFS_SETGET_STACK_FUNCS(backup_extent_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2144) 		   extent_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2145) BTRFS_SETGET_STACK_FUNCS(backup_extent_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2146) 		   extent_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2148) BTRFS_SETGET_STACK_FUNCS(backup_fs_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2149) 		   fs_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2150) BTRFS_SETGET_STACK_FUNCS(backup_fs_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2151) 		   fs_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2152) BTRFS_SETGET_STACK_FUNCS(backup_fs_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2153) 		   fs_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2154) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2155) BTRFS_SETGET_STACK_FUNCS(backup_dev_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2156) 		   dev_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2157) BTRFS_SETGET_STACK_FUNCS(backup_dev_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2158) 		   dev_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2159) BTRFS_SETGET_STACK_FUNCS(backup_dev_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2160) 		   dev_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2162) BTRFS_SETGET_STACK_FUNCS(backup_csum_root, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2163) 		   csum_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2164) BTRFS_SETGET_STACK_FUNCS(backup_csum_root_gen, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2165) 		   csum_root_gen, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2166) BTRFS_SETGET_STACK_FUNCS(backup_csum_root_level, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2167) 		   csum_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2168) BTRFS_SETGET_STACK_FUNCS(backup_total_bytes, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2169) 		   total_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2170) BTRFS_SETGET_STACK_FUNCS(backup_bytes_used, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2171) 		   bytes_used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2172) BTRFS_SETGET_STACK_FUNCS(backup_num_devices, struct btrfs_root_backup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2173) 		   num_devices, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2175) /* struct btrfs_balance_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2176) BTRFS_SETGET_FUNCS(balance_flags, struct btrfs_balance_item, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2178) static inline void btrfs_balance_data(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2179) 				      const struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2180) 				      struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2181) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2182) 	read_eb_member(eb, bi, struct btrfs_balance_item, data, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2183) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2185) static inline void btrfs_set_balance_data(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2186) 				  struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2187) 				  const struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2188) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2189) 	write_eb_member(eb, bi, struct btrfs_balance_item, data, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2192) static inline void btrfs_balance_meta(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2193) 				      const struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2194) 				      struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2195) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2196) 	read_eb_member(eb, bi, struct btrfs_balance_item, meta, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2197) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2199) static inline void btrfs_set_balance_meta(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2200) 				  struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2201) 				  const struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2202) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2203) 	write_eb_member(eb, bi, struct btrfs_balance_item, meta, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2204) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2206) static inline void btrfs_balance_sys(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2207) 				     const struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2208) 				     struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2209) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2210) 	read_eb_member(eb, bi, struct btrfs_balance_item, sys, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2211) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2213) static inline void btrfs_set_balance_sys(struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2214) 				 struct btrfs_balance_item *bi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2215) 				 const struct btrfs_disk_balance_args *ba)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2216) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2217) 	write_eb_member(eb, bi, struct btrfs_balance_item, sys, ba);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2218) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2220) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2221) btrfs_disk_balance_args_to_cpu(struct btrfs_balance_args *cpu,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2222) 			       const struct btrfs_disk_balance_args *disk)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2223) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2224) 	memset(cpu, 0, sizeof(*cpu));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2226) 	cpu->profiles = le64_to_cpu(disk->profiles);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2227) 	cpu->usage = le64_to_cpu(disk->usage);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2228) 	cpu->devid = le64_to_cpu(disk->devid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2229) 	cpu->pstart = le64_to_cpu(disk->pstart);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2230) 	cpu->pend = le64_to_cpu(disk->pend);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2231) 	cpu->vstart = le64_to_cpu(disk->vstart);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2232) 	cpu->vend = le64_to_cpu(disk->vend);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2233) 	cpu->target = le64_to_cpu(disk->target);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2234) 	cpu->flags = le64_to_cpu(disk->flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2235) 	cpu->limit = le64_to_cpu(disk->limit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2236) 	cpu->stripes_min = le32_to_cpu(disk->stripes_min);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2237) 	cpu->stripes_max = le32_to_cpu(disk->stripes_max);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2238) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2240) static inline void
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2241) btrfs_cpu_balance_args_to_disk(struct btrfs_disk_balance_args *disk,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2242) 			       const struct btrfs_balance_args *cpu)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2243) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2244) 	memset(disk, 0, sizeof(*disk));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2246) 	disk->profiles = cpu_to_le64(cpu->profiles);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2247) 	disk->usage = cpu_to_le64(cpu->usage);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2248) 	disk->devid = cpu_to_le64(cpu->devid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2249) 	disk->pstart = cpu_to_le64(cpu->pstart);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2250) 	disk->pend = cpu_to_le64(cpu->pend);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2251) 	disk->vstart = cpu_to_le64(cpu->vstart);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2252) 	disk->vend = cpu_to_le64(cpu->vend);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2253) 	disk->target = cpu_to_le64(cpu->target);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2254) 	disk->flags = cpu_to_le64(cpu->flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2255) 	disk->limit = cpu_to_le64(cpu->limit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2256) 	disk->stripes_min = cpu_to_le32(cpu->stripes_min);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2257) 	disk->stripes_max = cpu_to_le32(cpu->stripes_max);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2258) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2260) /* struct btrfs_super_block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2261) BTRFS_SETGET_STACK_FUNCS(super_bytenr, struct btrfs_super_block, bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2262) BTRFS_SETGET_STACK_FUNCS(super_flags, struct btrfs_super_block, flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2263) BTRFS_SETGET_STACK_FUNCS(super_generation, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2264) 			 generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2265) BTRFS_SETGET_STACK_FUNCS(super_root, struct btrfs_super_block, root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2266) BTRFS_SETGET_STACK_FUNCS(super_sys_array_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2267) 			 struct btrfs_super_block, sys_chunk_array_size, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2268) BTRFS_SETGET_STACK_FUNCS(super_chunk_root_generation,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2269) 			 struct btrfs_super_block, chunk_root_generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2270) BTRFS_SETGET_STACK_FUNCS(super_root_level, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2271) 			 root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2272) BTRFS_SETGET_STACK_FUNCS(super_chunk_root, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2273) 			 chunk_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2274) BTRFS_SETGET_STACK_FUNCS(super_chunk_root_level, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2275) 			 chunk_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2276) BTRFS_SETGET_STACK_FUNCS(super_log_root, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2277) 			 log_root, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2278) BTRFS_SETGET_STACK_FUNCS(super_log_root_transid, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2279) 			 log_root_transid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2280) BTRFS_SETGET_STACK_FUNCS(super_log_root_level, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2281) 			 log_root_level, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2282) BTRFS_SETGET_STACK_FUNCS(super_total_bytes, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2283) 			 total_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2284) BTRFS_SETGET_STACK_FUNCS(super_bytes_used, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2285) 			 bytes_used, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2286) BTRFS_SETGET_STACK_FUNCS(super_sectorsize, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2287) 			 sectorsize, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2288) BTRFS_SETGET_STACK_FUNCS(super_nodesize, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2289) 			 nodesize, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2290) BTRFS_SETGET_STACK_FUNCS(super_stripesize, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2291) 			 stripesize, 32);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2292) BTRFS_SETGET_STACK_FUNCS(super_root_dir, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2293) 			 root_dir_objectid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2294) BTRFS_SETGET_STACK_FUNCS(super_num_devices, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2295) 			 num_devices, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2296) BTRFS_SETGET_STACK_FUNCS(super_compat_flags, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2297) 			 compat_flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2298) BTRFS_SETGET_STACK_FUNCS(super_compat_ro_flags, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2299) 			 compat_ro_flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2300) BTRFS_SETGET_STACK_FUNCS(super_incompat_flags, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2301) 			 incompat_flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2302) BTRFS_SETGET_STACK_FUNCS(super_csum_type, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2303) 			 csum_type, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2304) BTRFS_SETGET_STACK_FUNCS(super_cache_generation, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2305) 			 cache_generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2306) BTRFS_SETGET_STACK_FUNCS(super_magic, struct btrfs_super_block, magic, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2307) BTRFS_SETGET_STACK_FUNCS(super_uuid_tree_generation, struct btrfs_super_block,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2308) 			 uuid_tree_generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2310) int btrfs_super_csum_size(const struct btrfs_super_block *s);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2311) const char *btrfs_super_csum_name(u16 csum_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2312) const char *btrfs_super_csum_driver(u16 csum_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2313) size_t __attribute_const__ btrfs_get_num_csums(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2315) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2316) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2317)  * The leaf data grows from end-to-front in the node.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2318)  * this returns the address of the start of the last item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2319)  * which is the stop of the leaf data stack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2320)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2321) static inline unsigned int leaf_data_end(const struct extent_buffer *leaf)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2322) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2323) 	u32 nr = btrfs_header_nritems(leaf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2324) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2325) 	if (nr == 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2326) 		return BTRFS_LEAF_DATA_SIZE(leaf->fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2327) 	return btrfs_item_offset_nr(leaf, nr - 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2328) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2330) /* struct btrfs_file_extent_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2331) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_type, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2332) 			 type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2333) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_disk_bytenr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2334) 			 struct btrfs_file_extent_item, disk_bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2335) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2336) 			 struct btrfs_file_extent_item, offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2337) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_generation,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2338) 			 struct btrfs_file_extent_item, generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2339) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2340) 			 struct btrfs_file_extent_item, num_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2341) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_ram_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2342) 			 struct btrfs_file_extent_item, ram_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2343) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_disk_num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2344) 			 struct btrfs_file_extent_item, disk_num_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2345) BTRFS_SETGET_STACK_FUNCS(stack_file_extent_compression,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2346) 			 struct btrfs_file_extent_item, compression, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2348) static inline unsigned long
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2349) btrfs_file_extent_inline_start(const struct btrfs_file_extent_item *e)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2350) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2351) 	return (unsigned long)e + BTRFS_FILE_EXTENT_INLINE_DATA_START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2352) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2354) static inline u32 btrfs_file_extent_calc_inline_size(u32 datasize)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2355) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2356) 	return BTRFS_FILE_EXTENT_INLINE_DATA_START + datasize;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2357) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2358) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2359) BTRFS_SETGET_FUNCS(file_extent_type, struct btrfs_file_extent_item, type, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2360) BTRFS_SETGET_FUNCS(file_extent_disk_bytenr, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2361) 		   disk_bytenr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2362) BTRFS_SETGET_FUNCS(file_extent_generation, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2363) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2364) BTRFS_SETGET_FUNCS(file_extent_disk_num_bytes, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2365) 		   disk_num_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2366) BTRFS_SETGET_FUNCS(file_extent_offset, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2367) 		  offset, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2368) BTRFS_SETGET_FUNCS(file_extent_num_bytes, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2369) 		   num_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2370) BTRFS_SETGET_FUNCS(file_extent_ram_bytes, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2371) 		   ram_bytes, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2372) BTRFS_SETGET_FUNCS(file_extent_compression, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2373) 		   compression, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2374) BTRFS_SETGET_FUNCS(file_extent_encryption, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2375) 		   encryption, 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2376) BTRFS_SETGET_FUNCS(file_extent_other_encoding, struct btrfs_file_extent_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2377) 		   other_encoding, 16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2378) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2379) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2380)  * this returns the number of bytes used by the item on disk, minus the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2381)  * size of any extent headers.  If a file is compressed on disk, this is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2382)  * the compressed size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2383)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2384) static inline u32 btrfs_file_extent_inline_item_len(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2385) 						const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2386) 						struct btrfs_item *e)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2387) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2388) 	return btrfs_item_size(eb, e) - BTRFS_FILE_EXTENT_INLINE_DATA_START;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2389) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2390) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2391) /* btrfs_qgroup_status_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2392) BTRFS_SETGET_FUNCS(qgroup_status_generation, struct btrfs_qgroup_status_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2393) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2394) BTRFS_SETGET_FUNCS(qgroup_status_version, struct btrfs_qgroup_status_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2395) 		   version, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2396) BTRFS_SETGET_FUNCS(qgroup_status_flags, struct btrfs_qgroup_status_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2397) 		   flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2398) BTRFS_SETGET_FUNCS(qgroup_status_rescan, struct btrfs_qgroup_status_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2399) 		   rescan, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2400) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2401) /* btrfs_qgroup_info_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2402) BTRFS_SETGET_FUNCS(qgroup_info_generation, struct btrfs_qgroup_info_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2403) 		   generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2404) BTRFS_SETGET_FUNCS(qgroup_info_rfer, struct btrfs_qgroup_info_item, rfer, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2405) BTRFS_SETGET_FUNCS(qgroup_info_rfer_cmpr, struct btrfs_qgroup_info_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2406) 		   rfer_cmpr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2407) BTRFS_SETGET_FUNCS(qgroup_info_excl, struct btrfs_qgroup_info_item, excl, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2408) BTRFS_SETGET_FUNCS(qgroup_info_excl_cmpr, struct btrfs_qgroup_info_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2409) 		   excl_cmpr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2410) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2411) BTRFS_SETGET_STACK_FUNCS(stack_qgroup_info_generation,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2412) 			 struct btrfs_qgroup_info_item, generation, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2413) BTRFS_SETGET_STACK_FUNCS(stack_qgroup_info_rfer, struct btrfs_qgroup_info_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2414) 			 rfer, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2415) BTRFS_SETGET_STACK_FUNCS(stack_qgroup_info_rfer_cmpr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2416) 			 struct btrfs_qgroup_info_item, rfer_cmpr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2417) BTRFS_SETGET_STACK_FUNCS(stack_qgroup_info_excl, struct btrfs_qgroup_info_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2418) 			 excl, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2419) BTRFS_SETGET_STACK_FUNCS(stack_qgroup_info_excl_cmpr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2420) 			 struct btrfs_qgroup_info_item, excl_cmpr, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2422) /* btrfs_qgroup_limit_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2423) BTRFS_SETGET_FUNCS(qgroup_limit_flags, struct btrfs_qgroup_limit_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2424) 		   flags, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2425) BTRFS_SETGET_FUNCS(qgroup_limit_max_rfer, struct btrfs_qgroup_limit_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2426) 		   max_rfer, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2427) BTRFS_SETGET_FUNCS(qgroup_limit_max_excl, struct btrfs_qgroup_limit_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2428) 		   max_excl, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2429) BTRFS_SETGET_FUNCS(qgroup_limit_rsv_rfer, struct btrfs_qgroup_limit_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2430) 		   rsv_rfer, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2431) BTRFS_SETGET_FUNCS(qgroup_limit_rsv_excl, struct btrfs_qgroup_limit_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2432) 		   rsv_excl, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2433) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2434) /* btrfs_dev_replace_item */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2435) BTRFS_SETGET_FUNCS(dev_replace_src_devid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2436) 		   struct btrfs_dev_replace_item, src_devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2437) BTRFS_SETGET_FUNCS(dev_replace_cont_reading_from_srcdev_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2438) 		   struct btrfs_dev_replace_item, cont_reading_from_srcdev_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2439) 		   64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2440) BTRFS_SETGET_FUNCS(dev_replace_replace_state, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2441) 		   replace_state, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2442) BTRFS_SETGET_FUNCS(dev_replace_time_started, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2443) 		   time_started, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2444) BTRFS_SETGET_FUNCS(dev_replace_time_stopped, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2445) 		   time_stopped, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2446) BTRFS_SETGET_FUNCS(dev_replace_num_write_errors, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2447) 		   num_write_errors, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2448) BTRFS_SETGET_FUNCS(dev_replace_num_uncorrectable_read_errors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2449) 		   struct btrfs_dev_replace_item, num_uncorrectable_read_errors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2450) 		   64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2451) BTRFS_SETGET_FUNCS(dev_replace_cursor_left, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2452) 		   cursor_left, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2453) BTRFS_SETGET_FUNCS(dev_replace_cursor_right, struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2454) 		   cursor_right, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2455) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2456) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_src_devid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2457) 			 struct btrfs_dev_replace_item, src_devid, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2458) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cont_reading_from_srcdev_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2459) 			 struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2460) 			 cont_reading_from_srcdev_mode, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2461) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_replace_state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2462) 			 struct btrfs_dev_replace_item, replace_state, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2463) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_time_started,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2464) 			 struct btrfs_dev_replace_item, time_started, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2465) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_time_stopped,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2466) 			 struct btrfs_dev_replace_item, time_stopped, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2467) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_num_write_errors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2468) 			 struct btrfs_dev_replace_item, num_write_errors, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2469) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_num_uncorrectable_read_errors,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2470) 			 struct btrfs_dev_replace_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2471) 			 num_uncorrectable_read_errors, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2472) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cursor_left,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2473) 			 struct btrfs_dev_replace_item, cursor_left, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2474) BTRFS_SETGET_STACK_FUNCS(stack_dev_replace_cursor_right,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2475) 			 struct btrfs_dev_replace_item, cursor_right, 64);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2476) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2477) /* helper function to cast into the data area of the leaf. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2478) #define btrfs_item_ptr(leaf, slot, type) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2479) 	((type *)(BTRFS_LEAF_DATA_OFFSET + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2480) 	btrfs_item_offset_nr(leaf, slot)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2481) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2482) #define btrfs_item_ptr_offset(leaf, slot) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2483) 	((unsigned long)(BTRFS_LEAF_DATA_OFFSET + \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2484) 	btrfs_item_offset_nr(leaf, slot)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2486) static inline u32 btrfs_crc32c(u32 crc, const void *address, unsigned length)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2487) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2488) 	return crc32c(crc, address, length);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2489) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2490) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2491) static inline void btrfs_crc32c_final(u32 crc, u8 *result)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2492) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2493) 	put_unaligned_le32(~crc, result);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2494) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2495) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2496) static inline u64 btrfs_name_hash(const char *name, int len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2497) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2498)        return crc32c((u32)~1, name, len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2500) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2501) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2502)  * Figure the key offset of an extended inode ref
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2503)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2504) static inline u64 btrfs_extref_hash(u64 parent_objectid, const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2505)                                    int len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2506) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2507)        return (u64) crc32c(parent_objectid, name, len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2508) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2509) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2510) static inline gfp_t btrfs_alloc_write_mask(struct address_space *mapping)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2511) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2512) 	return mapping_gfp_constraint(mapping, ~__GFP_FS);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2513) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2514) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2515) /* extent-tree.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2516) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2517) enum btrfs_inline_ref_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2518) 	BTRFS_REF_TYPE_INVALID,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2519) 	BTRFS_REF_TYPE_BLOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2520) 	BTRFS_REF_TYPE_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2521) 	BTRFS_REF_TYPE_ANY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2522) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2523) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2524) int btrfs_get_extent_inline_ref_type(const struct extent_buffer *eb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2525) 				     struct btrfs_extent_inline_ref *iref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2526) 				     enum btrfs_inline_ref_type is_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2527) u64 hash_extent_data_ref(u64 root_objectid, u64 owner, u64 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2529) u64 btrfs_csum_bytes_to_leaves(struct btrfs_fs_info *fs_info, u64 csum_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2530) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2531) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2532)  * Use this if we would be adding new items, as we could split nodes as we cow
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2533)  * down the tree.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2534)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2535) static inline u64 btrfs_calc_insert_metadata_size(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2536) 						  unsigned num_items)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2537) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2538) 	return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * 2 * num_items;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2539) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2540) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2541) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2542)  * Doing a truncate or a modification won't result in new nodes or leaves, just
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2543)  * what we need for COW.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2544)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2545) static inline u64 btrfs_calc_metadata_size(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2546) 						 unsigned num_items)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2547) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2548) 	return (u64)fs_info->nodesize * BTRFS_MAX_LEVEL * num_items;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2549) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2550) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2551) int btrfs_add_excluded_extent(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2552) 			      u64 start, u64 num_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2553) void btrfs_free_excluded_extents(struct btrfs_block_group *cache);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2554) int btrfs_run_delayed_refs(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2555) 			   unsigned long count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2556) void btrfs_cleanup_ref_head_accounting(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2557) 				  struct btrfs_delayed_ref_root *delayed_refs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2558) 				  struct btrfs_delayed_ref_head *head);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2559) int btrfs_lookup_data_extent(struct btrfs_fs_info *fs_info, u64 start, u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2560) int btrfs_lookup_extent_info(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2561) 			     struct btrfs_fs_info *fs_info, u64 bytenr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2562) 			     u64 offset, int metadata, u64 *refs, u64 *flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2563) int btrfs_pin_extent(struct btrfs_trans_handle *trans, u64 bytenr, u64 num,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2564) 		     int reserved);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2565) int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2566) 				    u64 bytenr, u64 num_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2567) int btrfs_exclude_logged_extents(struct extent_buffer *eb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2568) int btrfs_cross_ref_exist(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2569) 			  u64 objectid, u64 offset, u64 bytenr, bool strict);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2570) struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2571) 					     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2572) 					     u64 parent, u64 root_objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2573) 					     const struct btrfs_disk_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2574) 					     int level, u64 hint,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2575) 					     u64 empty_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2576) 					     enum btrfs_lock_nesting nest);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2577) void btrfs_free_tree_block(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2578) 			   struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2579) 			   struct extent_buffer *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2580) 			   u64 parent, int last_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2581) int btrfs_alloc_reserved_file_extent(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2582) 				     struct btrfs_root *root, u64 owner,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2583) 				     u64 offset, u64 ram_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2584) 				     struct btrfs_key *ins);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2585) int btrfs_alloc_logged_file_extent(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2586) 				   u64 root_objectid, u64 owner, u64 offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2587) 				   struct btrfs_key *ins);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2588) int btrfs_reserve_extent(struct btrfs_root *root, u64 ram_bytes, u64 num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2589) 			 u64 min_alloc_size, u64 empty_size, u64 hint_byte,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2590) 			 struct btrfs_key *ins, int is_data, int delalloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2591) int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2592) 		  struct extent_buffer *buf, int full_backref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2593) int btrfs_dec_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2594) 		  struct extent_buffer *buf, int full_backref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2595) int btrfs_set_disk_extent_flags(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2596) 				struct extent_buffer *eb, u64 flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2597) 				int level, int is_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2598) int btrfs_free_extent(struct btrfs_trans_handle *trans, struct btrfs_ref *ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2599) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2600) int btrfs_free_reserved_extent(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2601) 			       u64 start, u64 len, int delalloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2602) int btrfs_pin_reserved_extent(struct btrfs_trans_handle *trans, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2603) 			      u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2604) int btrfs_finish_extent_commit(struct btrfs_trans_handle *trans);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2605) int btrfs_inc_extent_ref(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2606) 			 struct btrfs_ref *generic_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2607) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2608) int btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2609) void btrfs_clear_space_info_full(struct btrfs_fs_info *info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2610) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2611) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2612)  * Different levels for to flush space when doing space reservations.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2613)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2614)  * The higher the level, the more methods we try to reclaim space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2615)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2616) enum btrfs_reserve_flush_enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2617) 	/* If we are in the transaction, we can't flush anything.*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2618) 	BTRFS_RESERVE_NO_FLUSH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2620) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2621) 	 * Flush space by:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2622) 	 * - Running delayed inode items
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2623) 	 * - Allocating a new chunk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2624) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2625) 	BTRFS_RESERVE_FLUSH_LIMIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2626) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2627) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2628) 	 * Flush space by:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2629) 	 * - Running delayed inode items
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2630) 	 * - Running delayed refs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2631) 	 * - Running delalloc and waiting for ordered extents
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2632) 	 * - Allocating a new chunk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2633) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2634) 	BTRFS_RESERVE_FLUSH_EVICT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2635) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2636) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2637) 	 * Flush space by above mentioned methods and by:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2638) 	 * - Running delayed iputs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2639) 	 * - Commiting transaction
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2640) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2641) 	 * Can be interruped by fatal signal.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2642) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2643) 	BTRFS_RESERVE_FLUSH_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2644) 	BTRFS_RESERVE_FLUSH_FREE_SPACE_INODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2645) 	BTRFS_RESERVE_FLUSH_ALL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2646) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2647) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2648) 	 * Pretty much the same as FLUSH_ALL, but can also steal space from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2649) 	 * global rsv.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2650) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2651) 	 * Can be interruped by fatal signal.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2652) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2653) 	BTRFS_RESERVE_FLUSH_ALL_STEAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2654) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2655) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2656) enum btrfs_flush_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2657) 	FLUSH_DELAYED_ITEMS_NR	=	1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2658) 	FLUSH_DELAYED_ITEMS	=	2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2659) 	FLUSH_DELAYED_REFS_NR	=	3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2660) 	FLUSH_DELAYED_REFS	=	4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2661) 	FLUSH_DELALLOC		=	5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2662) 	FLUSH_DELALLOC_WAIT	=	6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2663) 	ALLOC_CHUNK		=	7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2664) 	ALLOC_CHUNK_FORCE	=	8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2665) 	RUN_DELAYED_IPUTS	=	9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2666) 	COMMIT_TRANS		=	10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2667) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2669) int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2670) 				     struct btrfs_block_rsv *rsv,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2671) 				     int nitems, bool use_global_rsv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2672) void btrfs_subvolume_release_metadata(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2673) 				      struct btrfs_block_rsv *rsv);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2674) void btrfs_delalloc_release_extents(struct btrfs_inode *inode, u64 num_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2676) int btrfs_delalloc_reserve_metadata(struct btrfs_inode *inode, u64 num_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2677) u64 btrfs_account_ro_block_groups_free_space(struct btrfs_space_info *sinfo);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2678) int btrfs_error_unpin_extent_range(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2679) 				   u64 start, u64 end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2680) int btrfs_discard_extent(struct btrfs_fs_info *fs_info, u64 bytenr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2681) 			 u64 num_bytes, u64 *actual_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2682) int btrfs_trim_fs(struct btrfs_fs_info *fs_info, struct fstrim_range *range);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2683) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2684) int btrfs_init_space_info(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2685) int btrfs_delayed_refs_qgroup_accounting(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2686) 					 struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2687) int btrfs_start_write_no_snapshotting(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2688) void btrfs_end_write_no_snapshotting(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2689) void btrfs_wait_for_snapshot_creation(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2691) /* ctree.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2692) int btrfs_bin_search(struct extent_buffer *eb, const struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2693) 		     int *slot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2694) int __pure btrfs_comp_cpu_keys(const struct btrfs_key *k1, const struct btrfs_key *k2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2695) int btrfs_previous_item(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2696) 			struct btrfs_path *path, u64 min_objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2697) 			int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2698) int btrfs_previous_extent_item(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2699) 			struct btrfs_path *path, u64 min_objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2700) void btrfs_set_item_key_safe(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2701) 			     struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2702) 			     const struct btrfs_key *new_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2703) struct extent_buffer *btrfs_root_node(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2704) int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2705) 			struct btrfs_key *key, int lowest_level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2706) 			u64 min_trans);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2707) int btrfs_search_forward(struct btrfs_root *root, struct btrfs_key *min_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2708) 			 struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2709) 			 u64 min_trans);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2710) struct extent_buffer *btrfs_read_node_slot(struct extent_buffer *parent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2711) 					   int slot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2712) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2713) int btrfs_cow_block(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2714) 		    struct btrfs_root *root, struct extent_buffer *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2715) 		    struct extent_buffer *parent, int parent_slot,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2716) 		    struct extent_buffer **cow_ret,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2717) 		    enum btrfs_lock_nesting nest);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2718) int btrfs_copy_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2719) 		      struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2720) 		      struct extent_buffer *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2721) 		      struct extent_buffer **cow_ret, u64 new_root_objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2722) int btrfs_block_can_be_shared(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2723) 			      struct extent_buffer *buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2724) void btrfs_extend_item(struct btrfs_path *path, u32 data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2725) void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2726) int btrfs_split_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2727) 		     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2728) 		     struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2729) 		     const struct btrfs_key *new_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2730) 		     unsigned long split_offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2731) int btrfs_duplicate_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2732) 			 struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2733) 			 struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2734) 			 const struct btrfs_key *new_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2735) int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2736) 		u64 inum, u64 ioff, u8 key_type, struct btrfs_key *found_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2737) int btrfs_search_slot(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2738) 		      const struct btrfs_key *key, struct btrfs_path *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2739) 		      int ins_len, int cow);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2740) int btrfs_search_old_slot(struct btrfs_root *root, const struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2741) 			  struct btrfs_path *p, u64 time_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2742) int btrfs_search_slot_for_read(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2743) 			       const struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2744) 			       struct btrfs_path *p, int find_higher,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2745) 			       int return_any);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2746) int btrfs_realloc_node(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2747) 		       struct btrfs_root *root, struct extent_buffer *parent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2748) 		       int start_slot, u64 *last_ret,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2749) 		       struct btrfs_key *progress);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2750) void btrfs_release_path(struct btrfs_path *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2751) struct btrfs_path *btrfs_alloc_path(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2752) void btrfs_free_path(struct btrfs_path *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2753) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2754) int btrfs_del_items(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2755) 		   struct btrfs_path *path, int slot, int nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2756) static inline int btrfs_del_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2757) 				 struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2758) 				 struct btrfs_path *path)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2759) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2760) 	return btrfs_del_items(trans, root, path, path->slots[0], 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2761) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2762) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2763) void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2764) 			    const struct btrfs_key *cpu_key, u32 *data_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2765) 			    int nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2766) int btrfs_insert_item(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2767) 		      const struct btrfs_key *key, void *data, u32 data_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2768) int btrfs_insert_empty_items(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2769) 			     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2770) 			     struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2771) 			     const struct btrfs_key *cpu_key, u32 *data_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2772) 			     int nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2773) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2774) static inline int btrfs_insert_empty_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2775) 					  struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2776) 					  struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2777) 					  const struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2778) 					  u32 data_size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2779) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2780) 	return btrfs_insert_empty_items(trans, root, path, key, &data_size, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2781) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2782) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2783) int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2784) int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2785) int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2786) 			u64 time_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2787) static inline int btrfs_next_old_item(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2788) 				      struct btrfs_path *p, u64 time_seq)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2789) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2790) 	++p->slots[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2791) 	if (p->slots[0] >= btrfs_header_nritems(p->nodes[0]))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2792) 		return btrfs_next_old_leaf(root, p, time_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2793) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2794) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2795) static inline int btrfs_next_item(struct btrfs_root *root, struct btrfs_path *p)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2796) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2797) 	return btrfs_next_old_item(root, p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2798) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2799) int btrfs_leaf_free_space(struct extent_buffer *leaf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2800) int __must_check btrfs_drop_snapshot(struct btrfs_root *root, int update_ref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2801) 				     int for_reloc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2802) int btrfs_drop_subtree(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2803) 			struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2804) 			struct extent_buffer *node,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2805) 			struct extent_buffer *parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2806) static inline int btrfs_fs_closing(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2807) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2808) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2809) 	 * Do it this way so we only ever do one test_bit in the normal case.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2810) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2811) 	if (test_bit(BTRFS_FS_CLOSING_START, &fs_info->flags)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2812) 		if (test_bit(BTRFS_FS_CLOSING_DONE, &fs_info->flags))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2813) 			return 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2814) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2815) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2816) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2817) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2818) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2819) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2820)  * If we remount the fs to be R/O or umount the fs, the cleaner needn't do
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2821)  * anything except sleeping. This function is used to check the status of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2822)  * the fs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2823)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2824) static inline int btrfs_need_cleaner_sleep(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2825) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2826) 	return fs_info->sb->s_flags & SB_RDONLY || btrfs_fs_closing(fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2827) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2828) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2829) /* tree mod log functions from ctree.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2830) u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2831) 			   struct seq_list *elem);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2832) void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2833) 			    struct seq_list *elem);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2834) int btrfs_old_root_level(struct btrfs_root *root, u64 time_seq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2835) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2836) /* root-item.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2837) int btrfs_add_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2838) 		       u64 ref_id, u64 dirid, u64 sequence, const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2839) 		       int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2840) int btrfs_del_root_ref(struct btrfs_trans_handle *trans, u64 root_id,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2841) 		       u64 ref_id, u64 dirid, u64 *sequence, const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2842) 		       int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2843) int btrfs_del_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2844) 		   const struct btrfs_key *key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2845) int btrfs_insert_root(struct btrfs_trans_handle *trans, struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2846) 		      const struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2847) 		      struct btrfs_root_item *item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2848) int __must_check btrfs_update_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2849) 				   struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2850) 				   struct btrfs_key *key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2851) 				   struct btrfs_root_item *item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2852) int btrfs_find_root(struct btrfs_root *root, const struct btrfs_key *search_key,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2853) 		    struct btrfs_path *path, struct btrfs_root_item *root_item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2854) 		    struct btrfs_key *root_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2855) int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2856) void btrfs_set_root_node(struct btrfs_root_item *item,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2857) 			 struct extent_buffer *node);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2858) void btrfs_check_and_init_root_item(struct btrfs_root_item *item);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2859) void btrfs_update_root_times(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2860) 			     struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2862) /* uuid-tree.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2863) int btrfs_uuid_tree_add(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2864) 			u64 subid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2865) int btrfs_uuid_tree_remove(struct btrfs_trans_handle *trans, u8 *uuid, u8 type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2866) 			u64 subid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2867) int btrfs_uuid_tree_iterate(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2868) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2869) /* dir-item.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2870) int btrfs_check_dir_item_collision(struct btrfs_root *root, u64 dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2871) 			  const char *name, int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2872) int btrfs_insert_dir_item(struct btrfs_trans_handle *trans, const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2873) 			  int name_len, struct btrfs_inode *dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2874) 			  struct btrfs_key *location, u8 type, u64 index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2875) struct btrfs_dir_item *btrfs_lookup_dir_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2876) 					     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2877) 					     struct btrfs_path *path, u64 dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2878) 					     const char *name, int name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2879) 					     int mod);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2880) struct btrfs_dir_item *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2881) btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2882) 			    struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2883) 			    struct btrfs_path *path, u64 dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2884) 			    u64 objectid, const char *name, int name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2885) 			    int mod);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2886) struct btrfs_dir_item *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2887) btrfs_search_dir_index_item(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2888) 			    struct btrfs_path *path, u64 dirid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2889) 			    const char *name, int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2890) int btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2891) 			      struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2892) 			      struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2893) 			      struct btrfs_dir_item *di);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2894) int btrfs_insert_xattr_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2895) 			    struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2896) 			    struct btrfs_path *path, u64 objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2897) 			    const char *name, u16 name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2898) 			    const void *data, u16 data_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2899) struct btrfs_dir_item *btrfs_lookup_xattr(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2900) 					  struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2901) 					  struct btrfs_path *path, u64 dir,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2902) 					  const char *name, u16 name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2903) 					  int mod);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2904) struct btrfs_dir_item *btrfs_match_dir_item_name(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2905) 						 struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2906) 						 const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2907) 						 int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2908) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2909) /* orphan.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2910) int btrfs_insert_orphan_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2911) 			     struct btrfs_root *root, u64 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2912) int btrfs_del_orphan_item(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2913) 			  struct btrfs_root *root, u64 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2914) int btrfs_find_orphan_item(struct btrfs_root *root, u64 offset);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2915) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2916) /* inode-item.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2917) int btrfs_insert_inode_ref(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2918) 			   struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2919) 			   const char *name, int name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2920) 			   u64 inode_objectid, u64 ref_objectid, u64 index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2921) int btrfs_del_inode_ref(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2922) 			   struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2923) 			   const char *name, int name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2924) 			   u64 inode_objectid, u64 ref_objectid, u64 *index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2925) int btrfs_insert_empty_inode(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2926) 			     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2927) 			     struct btrfs_path *path, u64 objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2928) int btrfs_lookup_inode(struct btrfs_trans_handle *trans, struct btrfs_root
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2929) 		       *root, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2930) 		       struct btrfs_key *location, int mod);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2931) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2932) struct btrfs_inode_extref *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2933) btrfs_lookup_inode_extref(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2934) 			  struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2935) 			  struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2936) 			  const char *name, int name_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2937) 			  u64 inode_objectid, u64 ref_objectid, int ins_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2938) 			  int cow);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2939) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2940) struct btrfs_inode_ref *btrfs_find_name_in_backref(struct extent_buffer *leaf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2941) 						   int slot, const char *name,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2942) 						   int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2943) struct btrfs_inode_extref *btrfs_find_name_in_ext_backref(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2944) 		struct extent_buffer *leaf, int slot, u64 ref_objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2945) 		const char *name, int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2946) /* file-item.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2947) struct btrfs_dio_private;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2948) int btrfs_del_csums(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2949) 		    struct btrfs_root *root, u64 bytenr, u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2950) blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2951) 				   u64 offset, u8 *dst);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2952) int btrfs_insert_file_extent(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2953) 			     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2954) 			     u64 objectid, u64 pos,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2955) 			     u64 disk_offset, u64 disk_num_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2956) 			     u64 num_bytes, u64 offset, u64 ram_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2957) 			     u8 compression, u8 encryption, u16 other_encoding);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2958) int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2959) 			     struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2960) 			     struct btrfs_path *path, u64 objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2961) 			     u64 bytenr, int mod);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2962) int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2963) 			   struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2964) 			   struct btrfs_ordered_sum *sums);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2965) blk_status_t btrfs_csum_one_bio(struct btrfs_inode *inode, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2966) 				u64 file_start, int contig);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2967) int btrfs_lookup_csums_range(struct btrfs_root *root, u64 start, u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2968) 			     struct list_head *list, int search_commit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2969) void btrfs_extent_item_to_extent_map(struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2970) 				     const struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2971) 				     struct btrfs_file_extent_item *fi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2972) 				     const bool new_inline,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2973) 				     struct extent_map *em);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2974) int btrfs_inode_clear_file_extent_range(struct btrfs_inode *inode, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2975) 					u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2976) int btrfs_inode_set_file_extent_range(struct btrfs_inode *inode, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2977) 				      u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2978) void btrfs_inode_safe_disk_i_size_write(struct inode *inode, u64 new_i_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2979) u64 btrfs_file_extent_end(const struct btrfs_path *path);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2980) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2981) /* inode.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2982) blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2983) 				   int mirror_num, unsigned long bio_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2984) int btrfs_verify_data_csum(struct btrfs_io_bio *io_bio, u64 phy_offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2985) 			   struct page *page, u64 start, u64 end, int mirror);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2986) struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2987) 					   u64 start, u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2988) noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2989) 			      u64 *orig_start, u64 *orig_block_len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2990) 			      u64 *ram_bytes, bool strict);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2991) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2992) void __btrfs_del_delalloc_inode(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2993) 				struct btrfs_inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2994) struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2995) int btrfs_set_inode_index(struct btrfs_inode *dir, u64 *index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2996) int btrfs_unlink_inode(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2997) 		       struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2998) 		       struct btrfs_inode *dir, struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2999) 		       const char *name, int name_len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3000) int btrfs_add_link(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3001) 		   struct btrfs_inode *parent_inode, struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3002) 		   const char *name, int name_len, int add_backref, u64 index);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3003) int btrfs_delete_subvolume(struct inode *dir, struct dentry *dentry);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3004) int btrfs_truncate_block(struct inode *inode, loff_t from, loff_t len,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3005) 			int front);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3006) int btrfs_truncate_inode_items(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3007) 			       struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3008) 			       struct inode *inode, u64 new_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3009) 			       u32 min_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3010) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3011) int btrfs_start_delalloc_snapshot(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3012) int btrfs_start_delalloc_roots(struct btrfs_fs_info *fs_info, u64 nr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3013) 			       bool in_reclaim_context);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3014) int btrfs_set_extent_delalloc(struct btrfs_inode *inode, u64 start, u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3015) 			      unsigned int extra_bits,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3016) 			      struct extent_state **cached_state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3017) int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3018) 			     struct btrfs_root *new_root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3019) 			     struct btrfs_root *parent_root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3020) 			     u64 new_dirid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3021)  void btrfs_set_delalloc_extent(struct inode *inode, struct extent_state *state,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3022) 			       unsigned *bits);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3023) void btrfs_clear_delalloc_extent(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3024) 				 struct extent_state *state, unsigned *bits);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3025) void btrfs_merge_delalloc_extent(struct inode *inode, struct extent_state *new,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3026) 				 struct extent_state *other);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3027) void btrfs_split_delalloc_extent(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3028) 				 struct extent_state *orig, u64 split);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3029) int btrfs_bio_fits_in_stripe(struct page *page, size_t size, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3030) 			     unsigned long bio_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3031) void btrfs_set_range_writeback(struct extent_io_tree *tree, u64 start, u64 end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3032) vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3033) int btrfs_readpage(struct file *file, struct page *page);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3034) void btrfs_evict_inode(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3035) int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3036) struct inode *btrfs_alloc_inode(struct super_block *sb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3037) void btrfs_destroy_inode(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3038) void btrfs_free_inode(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3039) int btrfs_drop_inode(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3040) int __init btrfs_init_cachep(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3041) void __cold btrfs_destroy_cachep(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3042) struct inode *btrfs_iget_path(struct super_block *s, u64 ino,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3043) 			      struct btrfs_root *root, struct btrfs_path *path);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3044) struct inode *btrfs_iget(struct super_block *s, u64 ino, struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3045) struct extent_map *btrfs_get_extent(struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3046) 				    struct page *page, size_t pg_offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3047) 				    u64 start, u64 end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3048) int btrfs_update_inode(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3049) 			      struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3050) 			      struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3051) int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3052) 				struct btrfs_root *root, struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3053) int btrfs_orphan_add(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3054) 		struct btrfs_inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3055) int btrfs_orphan_cleanup(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3056) int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3057) void btrfs_add_delayed_iput(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3058) void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3059) int btrfs_wait_on_delayed_iputs(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3060) int btrfs_prealloc_file_range(struct inode *inode, int mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3061) 			      u64 start, u64 num_bytes, u64 min_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3062) 			      loff_t actual_len, u64 *alloc_hint);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3063) int btrfs_prealloc_file_range_trans(struct inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3064) 				    struct btrfs_trans_handle *trans, int mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3065) 				    u64 start, u64 num_bytes, u64 min_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3066) 				    loff_t actual_len, u64 *alloc_hint);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3067) int btrfs_run_delalloc_range(struct btrfs_inode *inode, struct page *locked_page,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3068) 		u64 start, u64 end, int *page_started, unsigned long *nr_written,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3069) 		struct writeback_control *wbc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3070) int btrfs_writepage_cow_fixup(struct page *page, u64 start, u64 end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3071) void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3072) 					  u64 end, int uptodate);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3073) extern const struct dentry_operations btrfs_dentry_operations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3074) ssize_t btrfs_direct_IO(struct kiocb *iocb, struct iov_iter *iter);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3075) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3076) /* ioctl.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3077) long btrfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3078) long btrfs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3079) int btrfs_ioctl_get_supported_features(void __user *arg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3080) void btrfs_sync_inode_flags_to_i_flags(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3081) int __pure btrfs_is_empty_uuid(u8 *uuid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3082) int btrfs_defrag_file(struct inode *inode, struct file *file,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3083) 		      struct btrfs_ioctl_defrag_range_args *range,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3084) 		      u64 newer_than, unsigned long max_pages);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3085) void btrfs_get_block_group_info(struct list_head *groups_list,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3086) 				struct btrfs_ioctl_space_info *space);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3087) void btrfs_update_ioctl_balance_args(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3088) 			       struct btrfs_ioctl_balance_args *bargs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3089) bool btrfs_exclop_start(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3090) 			enum btrfs_exclusive_operation type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3091) void btrfs_exclop_finish(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3092) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3093) /* file.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3094) int __init btrfs_auto_defrag_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3095) void __cold btrfs_auto_defrag_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3096) int btrfs_add_inode_defrag(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3097) 			   struct btrfs_inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3098) int btrfs_run_defrag_inodes(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3099) void btrfs_cleanup_defrag_inodes(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3100) int btrfs_sync_file(struct file *file, loff_t start, loff_t end, int datasync);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3101) void btrfs_drop_extent_cache(struct btrfs_inode *inode, u64 start, u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3102) 			     int skip_pinned);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3103) extern const struct file_operations btrfs_file_operations;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3104) int __btrfs_drop_extents(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3105) 			 struct btrfs_root *root, struct btrfs_inode *inode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3106) 			 struct btrfs_path *path, u64 start, u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3107) 			 u64 *drop_end, int drop_cache,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3108) 			 int replace_extent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3109) 			 u32 extent_item_size,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3110) 			 int *key_inserted);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3111) int btrfs_drop_extents(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3112) 		       struct btrfs_root *root, struct inode *inode, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3113) 		       u64 end, int drop_cache);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3114) int btrfs_replace_file_extents(struct inode *inode, struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3115) 			   const u64 start, const u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3116) 			   struct btrfs_replace_extent_info *extent_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3117) 			   struct btrfs_trans_handle **trans_out);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3118) int btrfs_mark_extent_written(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3119) 			      struct btrfs_inode *inode, u64 start, u64 end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3120) int btrfs_release_file(struct inode *inode, struct file *file);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3121) int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3122) 		      size_t num_pages, loff_t pos, size_t write_bytes,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3123) 		      struct extent_state **cached);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3124) int btrfs_fdatawrite_range(struct inode *inode, loff_t start, loff_t end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3125) int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3126) 			   size_t *write_bytes);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3127) void btrfs_check_nocow_unlock(struct btrfs_inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3129) /* tree-defrag.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3130) int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3131) 			struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3133) /* super.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3134) int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3135) 			unsigned long new_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3136) int btrfs_sync_fs(struct super_block *sb, int wait);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3137) char *btrfs_get_subvol_name_from_objectid(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3138) 					  u64 subvol_objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3139) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3140) static inline __printf(2, 3) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3141) void btrfs_no_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3142) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3143) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3145) #ifdef CONFIG_PRINTK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3146) __printf(2, 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3147) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3148) void btrfs_printk(const struct btrfs_fs_info *fs_info, const char *fmt, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3149) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3150) #define btrfs_printk(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3151) 	btrfs_no_printk(fs_info, fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3152) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3154) #define btrfs_emerg(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3155) 	btrfs_printk(fs_info, KERN_EMERG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3156) #define btrfs_alert(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3157) 	btrfs_printk(fs_info, KERN_ALERT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3158) #define btrfs_crit(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3159) 	btrfs_printk(fs_info, KERN_CRIT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3160) #define btrfs_err(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3161) 	btrfs_printk(fs_info, KERN_ERR fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3162) #define btrfs_warn(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3163) 	btrfs_printk(fs_info, KERN_WARNING fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3164) #define btrfs_notice(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3165) 	btrfs_printk(fs_info, KERN_NOTICE fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3166) #define btrfs_info(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3167) 	btrfs_printk(fs_info, KERN_INFO fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3169) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3170)  * Wrappers that use printk_in_rcu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3171)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3172) #define btrfs_emerg_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3173) 	btrfs_printk_in_rcu(fs_info, KERN_EMERG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3174) #define btrfs_alert_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3175) 	btrfs_printk_in_rcu(fs_info, KERN_ALERT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3176) #define btrfs_crit_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3177) 	btrfs_printk_in_rcu(fs_info, KERN_CRIT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3178) #define btrfs_err_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3179) 	btrfs_printk_in_rcu(fs_info, KERN_ERR fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3180) #define btrfs_warn_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3181) 	btrfs_printk_in_rcu(fs_info, KERN_WARNING fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3182) #define btrfs_notice_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3183) 	btrfs_printk_in_rcu(fs_info, KERN_NOTICE fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3184) #define btrfs_info_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3185) 	btrfs_printk_in_rcu(fs_info, KERN_INFO fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3187) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3188)  * Wrappers that use a ratelimited printk_in_rcu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3189)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3190) #define btrfs_emerg_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3191) 	btrfs_printk_rl_in_rcu(fs_info, KERN_EMERG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3192) #define btrfs_alert_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3193) 	btrfs_printk_rl_in_rcu(fs_info, KERN_ALERT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3194) #define btrfs_crit_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3195) 	btrfs_printk_rl_in_rcu(fs_info, KERN_CRIT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3196) #define btrfs_err_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3197) 	btrfs_printk_rl_in_rcu(fs_info, KERN_ERR fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3198) #define btrfs_warn_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3199) 	btrfs_printk_rl_in_rcu(fs_info, KERN_WARNING fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3200) #define btrfs_notice_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3201) 	btrfs_printk_rl_in_rcu(fs_info, KERN_NOTICE fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3202) #define btrfs_info_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3203) 	btrfs_printk_rl_in_rcu(fs_info, KERN_INFO fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3205) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3206)  * Wrappers that use a ratelimited printk
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3207)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3208) #define btrfs_emerg_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3209) 	btrfs_printk_ratelimited(fs_info, KERN_EMERG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3210) #define btrfs_alert_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3211) 	btrfs_printk_ratelimited(fs_info, KERN_ALERT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3212) #define btrfs_crit_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3213) 	btrfs_printk_ratelimited(fs_info, KERN_CRIT fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3214) #define btrfs_err_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3215) 	btrfs_printk_ratelimited(fs_info, KERN_ERR fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3216) #define btrfs_warn_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3217) 	btrfs_printk_ratelimited(fs_info, KERN_WARNING fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3218) #define btrfs_notice_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3219) 	btrfs_printk_ratelimited(fs_info, KERN_NOTICE fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3220) #define btrfs_info_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3221) 	btrfs_printk_ratelimited(fs_info, KERN_INFO fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3223) #if defined(CONFIG_DYNAMIC_DEBUG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3224) #define btrfs_debug(fs_info, fmt, args...)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3225) 	_dynamic_func_call_no_desc(fmt, btrfs_printk,			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3226) 				   fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3227) #define btrfs_debug_in_rcu(fs_info, fmt, args...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3228) 	_dynamic_func_call_no_desc(fmt, btrfs_printk_in_rcu,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3229) 				   fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3230) #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3231) 	_dynamic_func_call_no_desc(fmt, btrfs_printk_rl_in_rcu,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3232) 				   fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3233) #define btrfs_debug_rl(fs_info, fmt, args...)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3234) 	_dynamic_func_call_no_desc(fmt, btrfs_printk_ratelimited,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3235) 				   fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3236) #elif defined(DEBUG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3237) #define btrfs_debug(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3238) 	btrfs_printk(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3239) #define btrfs_debug_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3240) 	btrfs_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3241) #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3242) 	btrfs_printk_rl_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3243) #define btrfs_debug_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3244) 	btrfs_printk_ratelimited(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3245) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3246) #define btrfs_debug(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3247) 	btrfs_no_printk(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3248) #define btrfs_debug_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3249) 	btrfs_no_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3250) #define btrfs_debug_rl_in_rcu(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3251) 	btrfs_no_printk_in_rcu(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3252) #define btrfs_debug_rl(fs_info, fmt, args...) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3253) 	btrfs_no_printk(fs_info, KERN_DEBUG fmt, ##args)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3254) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3255) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3256) #define btrfs_printk_in_rcu(fs_info, fmt, args...)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3257) do {							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3258) 	rcu_read_lock();				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3259) 	btrfs_printk(fs_info, fmt, ##args);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3260) 	rcu_read_unlock();				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3261) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3262) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3263) #define btrfs_no_printk_in_rcu(fs_info, fmt, args...)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3264) do {							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3265) 	rcu_read_lock();				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3266) 	btrfs_no_printk(fs_info, fmt, ##args);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3267) 	rcu_read_unlock();				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3268) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3270) #define btrfs_printk_ratelimited(fs_info, fmt, args...)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3271) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3272) 	static DEFINE_RATELIMIT_STATE(_rs,			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3273) 		DEFAULT_RATELIMIT_INTERVAL,			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3274) 		DEFAULT_RATELIMIT_BURST);       		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3275) 	if (__ratelimit(&_rs))					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3276) 		btrfs_printk(fs_info, fmt, ##args);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3277) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3278) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3279) #define btrfs_printk_rl_in_rcu(fs_info, fmt, args...)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3280) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3281) 	rcu_read_lock();					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3282) 	btrfs_printk_ratelimited(fs_info, fmt, ##args);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3283) 	rcu_read_unlock();					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3284) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3286) #ifdef CONFIG_BTRFS_ASSERT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3287) __cold __noreturn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3288) static inline void assertfail(const char *expr, const char *file, int line)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3289) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3290) 	pr_err("assertion failed: %s, in %s:%d\n", expr, file, line);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3291) 	BUG();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3292) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3293) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3294) #define ASSERT(expr)						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3295) 	(likely(expr) ? (void)0 : assertfail(#expr, __FILE__, __LINE__))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3297) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3298) static inline void assertfail(const char *expr, const char* file, int line) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3299) #define ASSERT(expr)	(void)(expr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3300) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3302) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3303)  * Use that for functions that are conditionally exported for sanity tests but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3304)  * otherwise static
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3305)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3306) #ifndef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3307) #define EXPORT_FOR_TESTS static
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3308) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3309) #define EXPORT_FOR_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3310) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3311) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3312) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3313) static inline void btrfs_print_v0_err(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3314) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3315) 	btrfs_err(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3316) "Unsupported V0 extent filesystem detected. Aborting. Please re-create your filesystem with a newer kernel");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3317) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3319) __printf(5, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3320) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3321) void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3322) 		     unsigned int line, int errno, const char *fmt, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3323) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3324) const char * __attribute_const__ btrfs_decode_error(int errno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3326) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3327) void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3328) 			       const char *function,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3329) 			       unsigned int line, int errno);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3330) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3331) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3332)  * Call btrfs_abort_transaction as early as possible when an error condition is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3333)  * detected, that way the exact line number is reported.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3334)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3335) #define btrfs_abort_transaction(trans, errno)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3336) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3337) 	/* Report first abort since mount */			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3338) 	if (!test_and_set_bit(BTRFS_FS_STATE_TRANS_ABORTED,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3339) 			&((trans)->fs_info->fs_state))) {	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3340) 		if ((errno) != -EIO && (errno) != -EROFS) {		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3341) 			WARN(1, KERN_DEBUG				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3342) 			"BTRFS: Transaction aborted (error %d)\n",	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3343) 			(errno));					\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3344) 		} else {						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3345) 			btrfs_debug((trans)->fs_info,			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3346) 				    "Transaction aborted (error %d)", \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3347) 				  (errno));			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3348) 		}						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3349) 	}							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3350) 	__btrfs_abort_transaction((trans), __func__,		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3351) 				  __LINE__, (errno));		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3352) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3354) #define btrfs_handle_fs_error(fs_info, errno, fmt, args...)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3355) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3356) 	__btrfs_handle_fs_error((fs_info), __func__, __LINE__,	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3357) 			  (errno), fmt, ##args);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3358) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3360) __printf(5, 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3361) __cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3362) void __btrfs_panic(struct btrfs_fs_info *fs_info, const char *function,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3363) 		   unsigned int line, int errno, const char *fmt, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3364) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3365)  * If BTRFS_MOUNT_PANIC_ON_FATAL_ERROR is in mount_opt, __btrfs_panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3366)  * will panic().  Otherwise we BUG() here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3367)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3368) #define btrfs_panic(fs_info, errno, fmt, args...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3369) do {									\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3370) 	__btrfs_panic(fs_info, __func__, __LINE__, errno, fmt, ##args);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3371) 	BUG();								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3372) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3373) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3374) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3375) /* compatibility and incompatibility defines */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3377) #define btrfs_set_fs_incompat(__fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3378) 	__btrfs_set_fs_incompat((__fs_info), BTRFS_FEATURE_INCOMPAT_##opt, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3379) 				#opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3380) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3381) static inline void __btrfs_set_fs_incompat(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3382) 					   u64 flag, const char* name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3383) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3384) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3385) 	u64 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3386) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3387) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3388) 	features = btrfs_super_incompat_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3389) 	if (!(features & flag)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3390) 		spin_lock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3391) 		features = btrfs_super_incompat_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3392) 		if (!(features & flag)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3393) 			features |= flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3394) 			btrfs_set_super_incompat_flags(disk_super, features);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3395) 			btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3396) 				"setting incompat feature flag for %s (0x%llx)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3397) 				name, flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3398) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3399) 		spin_unlock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3400) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3401) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3402) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3403) #define btrfs_clear_fs_incompat(__fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3404) 	__btrfs_clear_fs_incompat((__fs_info), BTRFS_FEATURE_INCOMPAT_##opt, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3405) 				  #opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3406) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3407) static inline void __btrfs_clear_fs_incompat(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3408) 					     u64 flag, const char* name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3409) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3410) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3411) 	u64 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3412) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3413) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3414) 	features = btrfs_super_incompat_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3415) 	if (features & flag) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3416) 		spin_lock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3417) 		features = btrfs_super_incompat_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3418) 		if (features & flag) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3419) 			features &= ~flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3420) 			btrfs_set_super_incompat_flags(disk_super, features);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3421) 			btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3422) 				"clearing incompat feature flag for %s (0x%llx)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3423) 				name, flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3424) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3425) 		spin_unlock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3426) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3427) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3428) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3429) #define btrfs_fs_incompat(fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3430) 	__btrfs_fs_incompat((fs_info), BTRFS_FEATURE_INCOMPAT_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3431) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3432) static inline bool __btrfs_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3433) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3434) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3435) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3436) 	return !!(btrfs_super_incompat_flags(disk_super) & flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3437) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3438) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3439) #define btrfs_set_fs_compat_ro(__fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3440) 	__btrfs_set_fs_compat_ro((__fs_info), BTRFS_FEATURE_COMPAT_RO_##opt, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3441) 				 #opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3443) static inline void __btrfs_set_fs_compat_ro(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3444) 					    u64 flag, const char *name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3445) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3446) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3447) 	u64 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3448) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3449) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3450) 	features = btrfs_super_compat_ro_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3451) 	if (!(features & flag)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3452) 		spin_lock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3453) 		features = btrfs_super_compat_ro_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3454) 		if (!(features & flag)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3455) 			features |= flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3456) 			btrfs_set_super_compat_ro_flags(disk_super, features);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3457) 			btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3458) 				"setting compat-ro feature flag for %s (0x%llx)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3459) 				name, flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3460) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3461) 		spin_unlock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3462) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3463) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3464) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3465) #define btrfs_clear_fs_compat_ro(__fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3466) 	__btrfs_clear_fs_compat_ro((__fs_info), BTRFS_FEATURE_COMPAT_RO_##opt, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3467) 				   #opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3468) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3469) static inline void __btrfs_clear_fs_compat_ro(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3470) 					      u64 flag, const char *name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3471) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3472) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3473) 	u64 features;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3475) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3476) 	features = btrfs_super_compat_ro_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3477) 	if (features & flag) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3478) 		spin_lock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3479) 		features = btrfs_super_compat_ro_flags(disk_super);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3480) 		if (features & flag) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3481) 			features &= ~flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3482) 			btrfs_set_super_compat_ro_flags(disk_super, features);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3483) 			btrfs_info(fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3484) 				"clearing compat-ro feature flag for %s (0x%llx)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3485) 				name, flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3486) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3487) 		spin_unlock(&fs_info->super_lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3488) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3489) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3490) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3491) #define btrfs_fs_compat_ro(fs_info, opt) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3492) 	__btrfs_fs_compat_ro((fs_info), BTRFS_FEATURE_COMPAT_RO_##opt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3493) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3494) static inline int __btrfs_fs_compat_ro(struct btrfs_fs_info *fs_info, u64 flag)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3495) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3496) 	struct btrfs_super_block *disk_super;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3497) 	disk_super = fs_info->super_copy;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3498) 	return !!(btrfs_super_compat_ro_flags(disk_super) & flag);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3500) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3501) /* acl.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3502) #ifdef CONFIG_BTRFS_FS_POSIX_ACL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3503) struct posix_acl *btrfs_get_acl(struct inode *inode, int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3504) int btrfs_set_acl(struct inode *inode, struct posix_acl *acl, int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3505) int btrfs_init_acl(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3506) 		   struct inode *inode, struct inode *dir);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3507) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3508) #define btrfs_get_acl NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3509) #define btrfs_set_acl NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3510) static inline int btrfs_init_acl(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3511) 				 struct inode *inode, struct inode *dir)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3512) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3513) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3514) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3515) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3516) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3517) /* relocation.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3518) int btrfs_relocate_block_group(struct btrfs_fs_info *fs_info, u64 group_start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3519) int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3520) 			  struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3521) int btrfs_update_reloc_root(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3522) 			    struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3523) int btrfs_recover_relocation(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3524) int btrfs_reloc_clone_csums(struct btrfs_inode *inode, u64 file_pos, u64 len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3525) int btrfs_reloc_cow_block(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3526) 			  struct btrfs_root *root, struct extent_buffer *buf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3527) 			  struct extent_buffer *cow);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3528) void btrfs_reloc_pre_snapshot(struct btrfs_pending_snapshot *pending,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3529) 			      u64 *bytes_to_reserve);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3530) int btrfs_reloc_post_snapshot(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3531) 			      struct btrfs_pending_snapshot *pending);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3532) int btrfs_should_cancel_balance(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3533) struct btrfs_root *find_reloc_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3534) 				   u64 bytenr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3535) int btrfs_should_ignore_reloc_root(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3536) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3537) /* scrub.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3538) int btrfs_scrub_dev(struct btrfs_fs_info *fs_info, u64 devid, u64 start,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3539) 		    u64 end, struct btrfs_scrub_progress *progress,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3540) 		    int readonly, int is_dev_replace);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3541) void btrfs_scrub_pause(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3542) void btrfs_scrub_continue(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3543) int btrfs_scrub_cancel(struct btrfs_fs_info *info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3544) int btrfs_scrub_cancel_dev(struct btrfs_device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3545) int btrfs_scrub_progress(struct btrfs_fs_info *fs_info, u64 devid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3546) 			 struct btrfs_scrub_progress *progress);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3547) static inline void btrfs_init_full_stripe_locks_tree(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3548) 			struct btrfs_full_stripe_locks_tree *locks_root)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3549) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3550) 	locks_root->root = RB_ROOT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3551) 	mutex_init(&locks_root->lock);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3552) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3554) /* dev-replace.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3555) void btrfs_bio_counter_inc_blocked(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3556) void btrfs_bio_counter_inc_noblocked(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3557) void btrfs_bio_counter_sub(struct btrfs_fs_info *fs_info, s64 amount);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3558) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3559) static inline void btrfs_bio_counter_dec(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3560) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3561) 	btrfs_bio_counter_sub(fs_info, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3562) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3563) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3564) /* reada.c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3565) struct reada_control {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3566) 	struct btrfs_fs_info	*fs_info;		/* tree to prefetch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3567) 	struct btrfs_key	key_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3568) 	struct btrfs_key	key_end;	/* exclusive */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3569) 	atomic_t		elems;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3570) 	struct kref		refcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3571) 	wait_queue_head_t	wait;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3572) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3573) struct reada_control *btrfs_reada_add(struct btrfs_root *root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3574) 			      struct btrfs_key *start, struct btrfs_key *end);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3575) int btrfs_reada_wait(void *handle);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3576) void btrfs_reada_detach(void *handle);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3577) int btree_readahead_hook(struct extent_buffer *eb, int err);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3578) void btrfs_reada_remove_dev(struct btrfs_device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3579) void btrfs_reada_undo_remove_dev(struct btrfs_device *dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3580) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3581) static inline int is_fstree(u64 rootid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3582) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3583) 	if (rootid == BTRFS_FS_TREE_OBJECTID ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3584) 	    ((s64)rootid >= (s64)BTRFS_FIRST_FREE_OBJECTID &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3585) 	      !btrfs_qgroup_level(rootid)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3586) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3587) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3588) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3589) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3590) static inline int btrfs_defrag_cancelled(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3591) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3592) 	return signal_pending(current);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3593) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3594) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3595) #define in_range(b, first, len) ((b) >= (first) && (b) < (first) + (len))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3596) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3597) /* Sanity test specific functions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3598) #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3599) void btrfs_test_destroy_inode(struct inode *inode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3600) static inline int btrfs_is_testing(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3601) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3602) 	return test_bit(BTRFS_FS_STATE_DUMMY_FS_INFO, &fs_info->fs_state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3603) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3604) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3605) static inline int btrfs_is_testing(struct btrfs_fs_info *fs_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3606) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3607) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3608) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3609) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3610) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3611) #endif