btrfs: add forward declarations and headers, part 2

Do a cleanup in more headers:

- add forward declarations for types referenced by pointers
- add includes when types need them

This fixes potential compilation problems if the headers are reordered
or the missing includes are not provided indirectly.

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2024-01-27 03:19:56 +01:00
parent 22b46bdc5f
commit 602035d7fe
26 changed files with 206 additions and 19 deletions

View File

@ -7,12 +7,14 @@
#ifndef BTRFS_BIO_H #ifndef BTRFS_BIO_H
#define BTRFS_BIO_H #define BTRFS_BIO_H
#include <linux/types.h>
#include <linux/bio.h> #include <linux/bio.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include "tree-checker.h" #include "tree-checker.h"
struct btrfs_bio; struct btrfs_bio;
struct btrfs_fs_info; struct btrfs_fs_info;
struct btrfs_inode;
#define BTRFS_BIO_INLINE_CSUM_SIZE 64 #define BTRFS_BIO_INLINE_CSUM_SIZE 64

View File

@ -3,8 +3,15 @@
#ifndef BTRFS_BLOCK_RSV_H #ifndef BTRFS_BLOCK_RSV_H
#define BTRFS_BLOCK_RSV_H #define BTRFS_BLOCK_RSV_H
#include <linux/types.h>
#include <linux/compiler.h>
#include <linux/spinlock.h>
struct btrfs_trans_handle; struct btrfs_trans_handle;
struct btrfs_root; struct btrfs_root;
struct btrfs_space_info;
struct btrfs_block_rsv;
struct btrfs_fs_info;
enum btrfs_reserve_flush_enum; enum btrfs_reserve_flush_enum;
/* /*

View File

@ -7,10 +7,18 @@
#define BTRFS_COMPRESSION_H #define BTRFS_COMPRESSION_H
#include <linux/sizes.h> #include <linux/sizes.h>
#include <linux/mm.h>
#include <linux/list.h>
#include <linux/workqueue.h>
#include <linux/wait.h>
#include "bio.h" #include "bio.h"
struct address_space;
struct page;
struct inode;
struct btrfs_inode; struct btrfs_inode;
struct btrfs_ordered_extent; struct btrfs_ordered_extent;
struct btrfs_bio;
/* /*
* We want to make sure that amount of RAM required to uncompress an extent is * We want to make sure that amount of RAM required to uncompress an extent is
@ -32,8 +40,6 @@ static_assert((BTRFS_MAX_COMPRESSED % PAGE_SIZE) == 0);
#define BTRFS_ZLIB_DEFAULT_LEVEL 3 #define BTRFS_ZLIB_DEFAULT_LEVEL 3
struct page;
struct compressed_bio { struct compressed_bio {
/* Number of compressed pages in the array */ /* Number of compressed pages in the array */
unsigned int nr_pages; unsigned int nr_pages;

View File

@ -7,15 +7,23 @@
#ifndef BTRFS_DELAYED_INODE_H #ifndef BTRFS_DELAYED_INODE_H
#define BTRFS_DELAYED_INODE_H #define BTRFS_DELAYED_INODE_H
#include <linux/types.h>
#include <linux/rbtree.h> #include <linux/rbtree.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/fs.h>
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/refcount.h> #include <linux/refcount.h>
#include "ctree.h" #include "ctree.h"
struct btrfs_disk_key;
struct btrfs_fs_info;
struct btrfs_inode;
struct btrfs_root;
struct btrfs_trans_handle;
enum btrfs_delayed_item_type { enum btrfs_delayed_item_type {
BTRFS_DELAYED_INSERTION_ITEM, BTRFS_DELAYED_INSERTION_ITEM,
BTRFS_DELAYED_DELETION_ITEM BTRFS_DELAYED_DELETION_ITEM

View File

@ -7,9 +7,21 @@
#define BTRFS_DISK_IO_H #define BTRFS_DISK_IO_H
#include <linux/sizes.h> #include <linux/sizes.h>
#include <linux/compiler_types.h>
#include "ctree.h" #include "ctree.h"
#include "fs.h" #include "fs.h"
struct block_device;
struct super_block;
struct extent_buffer;
struct btrfs_device;
struct btrfs_fs_devices;
struct btrfs_fs_info;
struct btrfs_super_block;
struct btrfs_trans_handle;
struct btrfs_tree_parent_check;
struct btrfs_transaction;
#define BTRFS_SUPER_MIRROR_MAX 3 #define BTRFS_SUPER_MIRROR_MAX 3
#define BTRFS_SUPER_MIRROR_SHIFT 12 #define BTRFS_SUPER_MIRROR_SHIFT 12
@ -29,10 +41,6 @@ static inline u64 btrfs_sb_offset(int mirror)
return BTRFS_SUPER_INFO_OFFSET; return BTRFS_SUPER_INFO_OFFSET;
} }
struct btrfs_device;
struct btrfs_fs_devices;
struct btrfs_tree_parent_check;
void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info); void btrfs_check_leaked_roots(struct btrfs_fs_info *fs_info);
void btrfs_init_fs_info(struct btrfs_fs_info *fs_info); void btrfs_init_fs_info(struct btrfs_fs_info *fs_info);
struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr, struct extent_buffer *read_tree_block(struct btrfs_fs_info *fs_info, u64 bytenr,

View File

@ -3,9 +3,16 @@
#ifndef BTRFS_EXTENT_IO_TREE_H #ifndef BTRFS_EXTENT_IO_TREE_H
#define BTRFS_EXTENT_IO_TREE_H #define BTRFS_EXTENT_IO_TREE_H
#include <linux/rbtree.h>
#include <linux/spinlock.h>
#include <linux/refcount.h>
#include <linux/list.h>
#include <linux/wait.h>
#include "misc.h" #include "misc.h"
struct extent_changeset; struct extent_changeset;
struct btrfs_fs_info;
struct btrfs_inode;
/* Bits for the extent state */ /* Bits for the extent state */
enum { enum {

View File

@ -3,11 +3,20 @@
#ifndef BTRFS_EXTENT_TREE_H #ifndef BTRFS_EXTENT_TREE_H
#define BTRFS_EXTENT_TREE_H #define BTRFS_EXTENT_TREE_H
#include <linux/types.h>
#include "misc.h" #include "misc.h"
#include "block-group.h" #include "block-group.h"
#include "locking.h"
struct extent_buffer;
struct btrfs_free_cluster; struct btrfs_free_cluster;
struct btrfs_fs_info;
struct btrfs_root;
struct btrfs_path;
struct btrfs_disk_key;
struct btrfs_delayed_ref_head; struct btrfs_delayed_ref_head;
struct btrfs_delayed_ref_root;
struct btrfs_extent_inline_ref;
enum btrfs_extent_allocation_policy { enum btrfs_extent_allocation_policy {
BTRFS_EXTENT_ALLOC_CLUSTERED, BTRFS_EXTENT_ALLOC_CLUSTERED,

View File

@ -7,12 +7,32 @@
#include <linux/refcount.h> #include <linux/refcount.h>
#include <linux/fiemap.h> #include <linux/fiemap.h>
#include <linux/btrfs_tree.h> #include <linux/btrfs_tree.h>
#include <linux/spinlock.h>
#include <linux/atomic.h>
#include <linux/rwsem.h>
#include <linux/list.h>
#include <linux/slab.h>
#include "compression.h" #include "compression.h"
#include "messages.h" #include "messages.h"
#include "ulist.h" #include "ulist.h"
#include "misc.h" #include "misc.h"
struct page;
struct file;
struct folio;
struct inode;
struct fiemap_extent_info;
struct readahead_control;
struct address_space;
struct writeback_control;
struct extent_io_tree;
struct extent_map_tree;
struct btrfs_block_group;
struct btrfs_fs_info;
struct btrfs_inode;
struct btrfs_root;
struct btrfs_trans_handle; struct btrfs_trans_handle;
struct btrfs_tree_parent_check;
enum { enum {
EXTENT_BUFFER_UPTODATE, EXTENT_BUFFER_UPTODATE,
@ -64,11 +84,6 @@ enum {
#define BITMAP_LAST_BYTE_MASK(nbits) \ #define BITMAP_LAST_BYTE_MASK(nbits) \
(BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1))) (BYTE_MASK >> (-(nbits) & (BITS_PER_BYTE - 1)))
struct btrfs_root;
struct btrfs_inode;
struct btrfs_fs_info;
struct extent_io_tree;
struct btrfs_tree_parent_check;
int __init extent_buffer_init_cachep(void); int __init extent_buffer_init_cachep(void);
void __cold extent_buffer_free_cachep(void); void __cold extent_buffer_free_cachep(void);

View File

@ -3,11 +3,18 @@
#ifndef BTRFS_EXTENT_MAP_H #ifndef BTRFS_EXTENT_MAP_H
#define BTRFS_EXTENT_MAP_H #define BTRFS_EXTENT_MAP_H
#include <linux/compiler_types.h>
#include <linux/rwlock_types.h>
#include <linux/rbtree.h> #include <linux/rbtree.h>
#include <linux/list.h>
#include <linux/refcount.h> #include <linux/refcount.h>
#include "misc.h" #include "misc.h"
#include "extent_map.h"
#include "compression.h" #include "compression.h"
struct btrfs_inode;
struct btrfs_fs_info;
#define EXTENT_MAP_LAST_BYTE ((u64)-4) #define EXTENT_MAP_LAST_BYTE ((u64)-4)
#define EXTENT_MAP_HOLE ((u64)-3) #define EXTENT_MAP_HOLE ((u64)-3)
#define EXTENT_MAP_INLINE ((u64)-2) #define EXTENT_MAP_INLINE ((u64)-2)

View File

@ -3,9 +3,20 @@
#ifndef BTRFS_FILE_ITEM_H #ifndef BTRFS_FILE_ITEM_H
#define BTRFS_FILE_ITEM_H #define BTRFS_FILE_ITEM_H
#include <linux/list.h>
#include <uapi/linux/btrfs_tree.h>
#include "accessors.h" #include "accessors.h"
struct extent_map; struct extent_map;
struct btrfs_file_extent_item;
struct btrfs_fs_info;
struct btrfs_path;
struct btrfs_bio;
struct btrfs_trans_handle;
struct btrfs_root;
struct btrfs_ordered_sum;
struct btrfs_path;
struct btrfs_inode;
#define BTRFS_FILE_EXTENT_INLINE_DATA_START \ #define BTRFS_FILE_EXTENT_INLINE_DATA_START \
(offsetof(struct btrfs_file_extent_item, disk_bytenr)) (offsetof(struct btrfs_file_extent_item, disk_bytenr))

View File

@ -6,6 +6,19 @@
#ifndef BTRFS_FREE_SPACE_CACHE_H #ifndef BTRFS_FREE_SPACE_CACHE_H
#define BTRFS_FREE_SPACE_CACHE_H #define BTRFS_FREE_SPACE_CACHE_H
#include <linux/rbtree.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include "fs.h"
struct inode;
struct page;
struct btrfs_fs_info;
struct btrfs_path;
struct btrfs_trans_handle;
struct btrfs_trim_block_group;
/* /*
* This is the trim state of an extent or bitmap. * This is the trim state of an extent or bitmap.
* *

View File

@ -6,7 +6,13 @@
#ifndef BTRFS_FREE_SPACE_TREE_H #ifndef BTRFS_FREE_SPACE_TREE_H
#define BTRFS_FREE_SPACE_TREE_H #define BTRFS_FREE_SPACE_TREE_H
#include <linux/bits.h>
struct btrfs_caching_control; struct btrfs_caching_control;
struct btrfs_fs_info;
struct btrfs_path;
struct btrfs_block_group;
struct btrfs_trans_handle;
/* /*
* The default size for new free space bitmap items. The last bitmap in a block * The default size for new free space bitmap items. The last bitmap in a block

View File

@ -6,14 +6,15 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/crc32c.h> #include <linux/crc32c.h>
struct fscrypt_str;
struct extent_buffer;
struct btrfs_trans_handle; struct btrfs_trans_handle;
struct btrfs_root; struct btrfs_root;
struct btrfs_path; struct btrfs_path;
struct btrfs_key; struct btrfs_key;
struct btrfs_inode_extref; struct btrfs_inode_extref;
struct btrfs_inode; struct btrfs_inode;
struct extent_buffer; struct btrfs_truncate_control;
struct fscrypt_str;
/* /*
* Return this if we need to call truncate_block for the last bit of the * Return this if we need to call truncate_block for the last bit of the

View File

@ -8,8 +8,14 @@
#include <linux/atomic.h> #include <linux/atomic.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/lockdep.h>
#include <linux/percpu_counter.h> #include <linux/percpu_counter.h>
#include "extent_io.h" #include "extent_io.h"
#include "locking.h"
struct extent_buffer;
struct btrfs_path;
struct btrfs_root;
#define BTRFS_WRITE_LOCK 1 #define BTRFS_WRITE_LOCK 1
#define BTRFS_READ_LOCK 2 #define BTRFS_READ_LOCK 2
@ -157,8 +163,6 @@ enum btrfs_lockdep_trans_states {
static_assert(BTRFS_NESTING_MAX <= MAX_LOCKDEP_SUBCLASSES, static_assert(BTRFS_NESTING_MAX <= MAX_LOCKDEP_SUBCLASSES,
"too many lock subclasses defined"); "too many lock subclasses defined");
struct btrfs_path;
void __btrfs_tree_lock(struct extent_buffer *eb, enum btrfs_lock_nesting nest); void __btrfs_tree_lock(struct extent_buffer *eb, enum btrfs_lock_nesting nest);
void btrfs_tree_lock(struct extent_buffer *eb); void btrfs_tree_lock(struct extent_buffer *eb);
void btrfs_tree_unlock(struct extent_buffer *eb); void btrfs_tree_unlock(struct extent_buffer *eb);

View File

@ -3,8 +3,10 @@
#ifndef BTRFS_LRU_CACHE_H #ifndef BTRFS_LRU_CACHE_H
#define BTRFS_LRU_CACHE_H #define BTRFS_LRU_CACHE_H
#include <linux/types.h>
#include <linux/maple_tree.h> #include <linux/maple_tree.h>
#include <linux/list.h> #include <linux/list.h>
#include "lru_cache.h"
/* /*
* A cache entry. This is meant to be embedded in a structure of a user of * A cache entry. This is meant to be embedded in a structure of a user of

View File

@ -3,6 +3,8 @@
#ifndef BTRFS_MISC_H #ifndef BTRFS_MISC_H
#define BTRFS_MISC_H #define BTRFS_MISC_H
#include <linux/types.h>
#include <linux/bitmap.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/math64.h> #include <linux/math64.h>

View File

@ -6,8 +6,21 @@
#ifndef BTRFS_ORDERED_DATA_H #ifndef BTRFS_ORDERED_DATA_H
#define BTRFS_ORDERED_DATA_H #define BTRFS_ORDERED_DATA_H
#include <linux/types.h>
#include <linux/list.h>
#include <linux/refcount.h>
#include <linux/completion.h>
#include <linux/rbtree.h>
#include <linux/wait.h>
#include "async-thread.h" #include "async-thread.h"
struct inode;
struct page;
struct extent_state;
struct btrfs_inode;
struct btrfs_root;
struct btrfs_fs_info;
struct btrfs_ordered_sum { struct btrfs_ordered_sum {
/* /*
* Logical start address and length for of the blocks covered by * Logical start address and length for of the blocks covered by

View File

@ -7,9 +7,18 @@
#ifndef BTRFS_RAID56_H #ifndef BTRFS_RAID56_H
#define BTRFS_RAID56_H #define BTRFS_RAID56_H
#include <linux/types.h>
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/bio.h>
#include <linux/refcount.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include "volumes.h" #include "volumes.h"
struct page;
struct sector_ptr;
struct btrfs_fs_info;
enum btrfs_rbio_ops { enum btrfs_rbio_ops {
BTRFS_RBIO_WRITE, BTRFS_RBIO_WRITE,
BTRFS_RBIO_READ_REBUILD, BTRFS_RBIO_READ_REBUILD,

View File

@ -8,6 +8,11 @@
#define BTRFS_SEND_H #define BTRFS_SEND_H
#include <linux/types.h> #include <linux/types.h>
#include <linux/sizes.h>
#include <linux/align.h>
struct inode;
struct btrfs_ioctl_send_args;
#define BTRFS_SEND_STREAM_MAGIC "btrfs-stream" #define BTRFS_SEND_STREAM_MAGIC "btrfs-stream"
/* Conditional support for the upcoming protocol version. */ /* Conditional support for the upcoming protocol version. */
@ -25,9 +30,6 @@
#define BTRFS_SEND_BUF_SIZE_V1 SZ_64K #define BTRFS_SEND_BUF_SIZE_V1 SZ_64K
#define BTRFS_SEND_BUF_SIZE_V2 ALIGN(SZ_16K + BTRFS_MAX_COMPRESSED, PAGE_SIZE) #define BTRFS_SEND_BUF_SIZE_V2 ALIGN(SZ_16K + BTRFS_MAX_COMPRESSED, PAGE_SIZE)
struct inode;
struct btrfs_ioctl_send_args;
enum btrfs_tlv_type { enum btrfs_tlv_type {
BTRFS_TLV_U8, BTRFS_TLV_U8,
BTRFS_TLV_U16, BTRFS_TLV_U16,

View File

@ -4,8 +4,17 @@
#define BTRFS_SPACE_INFO_H #define BTRFS_SPACE_INFO_H
#include <trace/events/btrfs.h> #include <trace/events/btrfs.h>
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/kobject.h>
#include <linux/lockdep.h>
#include <linux/wait.h>
#include <linux/rwsem.h>
#include "volumes.h" #include "volumes.h"
struct btrfs_fs_info;
struct btrfs_block_group;
/* /*
* Different levels for to flush space when doing space reservations. * Different levels for to flush space when doing space reservations.
* *

View File

@ -4,6 +4,11 @@
#define BTRFS_SUBPAGE_H #define BTRFS_SUBPAGE_H
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/atomic.h>
struct address_space;
struct folio;
struct btrfs_fs_info;
/* /*
* Extra info for subpapge bitmap. * Extra info for subpapge bitmap.

View File

@ -6,12 +6,27 @@
#ifndef BTRFS_TRANSACTION_H #ifndef BTRFS_TRANSACTION_H
#define BTRFS_TRANSACTION_H #define BTRFS_TRANSACTION_H
#include <linux/atomic.h>
#include <linux/refcount.h> #include <linux/refcount.h>
#include <linux/list.h>
#include <linux/time64.h>
#include <linux/mutex.h>
#include <linux/wait.h>
#include "btrfs_inode.h" #include "btrfs_inode.h"
#include "delayed-ref.h" #include "delayed-ref.h"
#include "ctree.h" #include "extent-io-tree.h"
#include "block-rsv.h"
#include "messages.h"
#include "misc.h" #include "misc.h"
struct dentry;
struct inode;
struct btrfs_pending_snapshot;
struct btrfs_fs_info;
struct btrfs_root_item;
struct btrfs_root;
struct btrfs_path;
/* Radix-tree tag for roots that are part of the trasaction. */ /* Radix-tree tag for roots that are part of the trasaction. */
#define BTRFS_ROOT_TRANS_TAG 0 #define BTRFS_ROOT_TRANS_TAG 0

View File

@ -6,10 +6,12 @@
#ifndef BTRFS_TREE_CHECKER_H #ifndef BTRFS_TREE_CHECKER_H
#define BTRFS_TREE_CHECKER_H #define BTRFS_TREE_CHECKER_H
#include <linux/types.h>
#include <uapi/linux/btrfs_tree.h> #include <uapi/linux/btrfs_tree.h>
struct extent_buffer; struct extent_buffer;
struct btrfs_chunk; struct btrfs_chunk;
struct btrfs_key;
/* All the extra info needed to verify the parentness of a tree block. */ /* All the extra info needed to verify the parentness of a tree block. */
struct btrfs_tree_parent_check { struct btrfs_tree_parent_check {

View File

@ -6,10 +6,18 @@
#ifndef BTRFS_TREE_LOG_H #ifndef BTRFS_TREE_LOG_H
#define BTRFS_TREE_LOG_H #define BTRFS_TREE_LOG_H
#include <linux/list.h>
#include <linux/fs.h>
#include "messages.h" #include "messages.h"
#include "ctree.h" #include "ctree.h"
#include "transaction.h" #include "transaction.h"
struct inode;
struct dentry;
struct btrfs_ordered_extent;
struct btrfs_root;
struct btrfs_trans_handle;
/* return value for btrfs_log_dentry_safe that means we don't need to log it at all */ /* return value for btrfs_log_dentry_safe that means we don't need to log it at all */
#define BTRFS_NO_LOG_SYNC 256 #define BTRFS_NO_LOG_SYNC 256

View File

@ -7,6 +7,7 @@
#ifndef BTRFS_ULIST_H #ifndef BTRFS_ULIST_H
#define BTRFS_ULIST_H #define BTRFS_ULIST_H
#include <linux/types.h>
#include <linux/list.h> #include <linux/list.h>
#include <linux/rbtree.h> #include <linux/rbtree.h>

View File

@ -4,12 +4,27 @@
#define BTRFS_ZONED_H #define BTRFS_ZONED_H
#include <linux/types.h> #include <linux/types.h>
#include <linux/atomic.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/blkzoned.h>
#include <linux/errno.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include "messages.h" #include "messages.h"
#include "volumes.h" #include "volumes.h"
#include "disk-io.h" #include "disk-io.h"
#include "block-group.h" #include "block-group.h"
#include "btrfs_inode.h" #include "btrfs_inode.h"
#include "fs.h"
struct block_device;
struct extent_buffer;
struct btrfs_bio;
struct btrfs_ordered_extent;
struct btrfs_fs_info;
struct btrfs_space_info;
struct btrfs_eb_write_context;
struct btrfs_fs_devices;
#define BTRFS_DEFAULT_RECLAIM_THRESH (75) #define BTRFS_DEFAULT_RECLAIM_THRESH (75)