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_DISK_IO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #define BTRFS_DISK_IO_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #define BTRFS_SUPER_INFO_OFFSET SZ_64K
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define BTRFS_SUPER_INFO_SIZE 4096
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define BTRFS_SUPER_MIRROR_MAX	 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #define BTRFS_SUPER_MIRROR_SHIFT 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * Fixed blocksize for all devices, applies to specific ways of reading
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  * metadata like superblock. Must meet the set_blocksize requirements.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  * Do not change.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define BTRFS_BDEV_BLOCKSIZE	(4096)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) enum btrfs_wq_endio_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	BTRFS_WQ_ENDIO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	BTRFS_WQ_ENDIO_METADATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	BTRFS_WQ_ENDIO_FREE_SPACE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	BTRFS_WQ_ENDIO_RAID56,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) static inline u64 btrfs_sb_offset(int mirror)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	u64 start = SZ_16K;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	if (mirror)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 		return start << (BTRFS_SUPER_MIRROR_SHIFT * mirror);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	return BTRFS_SUPER_INFO_OFFSET;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) struct btrfs_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) struct btrfs_fs_devices;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) void btrfs_init_fs_info(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) int btrfs_verify_level_key(struct extent_buffer *eb, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 			   struct btrfs_key *first_key, u64 parent_transid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 				      u64 parent_transid, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 				      struct btrfs_key *first_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) void readahead_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) struct extent_buffer *btrfs_find_create_tree_block(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 						struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 						u64 bytenr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) void btrfs_clean_tree_block(struct extent_buffer *buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) int __cold open_ctree(struct super_block *sb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	       struct btrfs_fs_devices *fs_devices,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	       char *options);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) void __cold close_ctree(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) int write_all_supers(struct btrfs_fs_info *fs_info, int max_mirrors);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) struct btrfs_super_block *btrfs_read_dev_super(struct block_device *bdev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) struct btrfs_super_block *btrfs_read_dev_one_super(struct block_device *bdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 						   int copy_num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) int btrfs_commit_super(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) struct btrfs_root *btrfs_read_tree_root(struct btrfs_root *tree_root,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 					struct btrfs_key *key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) int btrfs_insert_fs_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 			 struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) void btrfs_free_fs_roots(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) struct btrfs_root *btrfs_get_fs_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 				     u64 objectid, bool check_ref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) struct btrfs_root *btrfs_get_new_fs_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 					 u64 objectid, dev_t anon_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) struct btrfs_root *btrfs_get_fs_root_commit_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 						 struct btrfs_path *path,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 						 u64 objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) void btrfs_free_fs_info(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) int btrfs_cleanup_fs_roots(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) void btrfs_btree_balance_dirty(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) void btrfs_btree_balance_dirty_nodelay(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) void btrfs_drop_and_free_fs_root(struct btrfs_fs_info *fs_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 				 struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) int btrfs_validate_metadata_buffer(struct btrfs_io_bio *io_bio, u64 phy_offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 				   struct page *page, u64 start, u64 end,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 				   int mirror);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) blk_status_t btrfs_submit_metadata_bio(struct inode *inode, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 				       int mirror_num, unsigned long bio_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) struct btrfs_root *btrfs_alloc_dummy_root(struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)  * This function is used to grab the root, and avoid it is freed when we
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  * access it. But it doesn't ensure that the tree is not dropped.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  * If you want to ensure the whole tree is safe, you should use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  * 	fs_info->subvol_srcu
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) static inline struct btrfs_root *btrfs_grab_root(struct btrfs_root *root)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	if (!root)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 		return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	if (refcount_inc_not_zero(&root->refs))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 		return root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	return NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) void btrfs_put_root(struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) void btrfs_mark_buffer_dirty(struct extent_buffer *buf);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 			  int atomic);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) int btrfs_read_buffer(struct extent_buffer *buf, u64 parent_transid, int level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 		      struct btrfs_key *first_key);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) blk_status_t btrfs_bio_wq_end_io(struct btrfs_fs_info *info, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 			enum btrfs_wq_endio_type metadata);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) blk_status_t btrfs_wq_submit_bio(struct btrfs_fs_info *fs_info, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 			int mirror_num, unsigned long bio_flags,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 			u64 bio_offset, void *private_data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 			extent_submit_bio_start_t *submit_bio_start);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) blk_status_t btrfs_submit_bio_done(void *private_data, struct bio *bio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 			  int mirror_num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 			     struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 		       struct btrfs_root *root);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) void btrfs_cleanup_dirty_bgs(struct btrfs_transaction *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 			     struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) void btrfs_cleanup_one_transaction(struct btrfs_transaction *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 				  struct btrfs_fs_info *fs_info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct btrfs_root *btrfs_create_tree(struct btrfs_trans_handle *trans,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 				     u64 objectid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) int btree_lock_page_hook(struct page *page, void *data,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 				void (*flush_fn)(void *));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) int btrfs_get_num_tolerated_disk_barrier_failures(u64 flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) int __init btrfs_end_io_wq_init(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) void __cold btrfs_end_io_wq_exit(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #ifdef CONFIG_DEBUG_LOCK_ALLOC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) void btrfs_init_lockdep(void);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) void btrfs_set_buffer_lockdep_class(u64 objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 			            struct extent_buffer *eb, int level);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) static inline void btrfs_init_lockdep(void)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) { }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) static inline void btrfs_set_buffer_lockdep_class(u64 objectid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 					struct extent_buffer *eb, int level)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #endif