fs/btrfs/bio.h

Source file repositories/reference/linux-study-clean/fs/btrfs/bio.h

File Facts

System
Linux kernel
Corpus path
fs/btrfs/bio.h
Extension
.h
Size
3687 bytes
Lines
134
Domain
Core OS
Bucket
VFS And Filesystem Core
Inferred role
Core OS: implementation source
Status
source implementation candidate

Why This File Exists

Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.

Dependency Surface

Detected Declarations

Annotated Snippet

struct btrfs_bio {
	/*
	 * Inode and offset into it that this I/O operates on.
	 *
	 * If the inode is a data one, csum verification and read-repair
	 * will be done automatically.
	 * If the inode is a metadata one, everything is handled by the caller.
	 */
	struct btrfs_inode *inode;
	u64 file_offset;

	union {
		/*
		 * For data reads: checksumming and original I/O information.
		 * (for internal use in the btrfs_submit_bbio() machinery only)
		 */
		struct {
			u8 *csum;
			u8 csum_inline[BTRFS_BIO_INLINE_CSUM_SIZE];
			struct bvec_iter saved_iter;
		};

		/*
		 * For data writes:
		 * - ordered extent covering the bio
		 * - pointer to the checksums for this bio
		 * - original physical address from the allocator
		 *   (for zone append only)
		 * - original logical address, used for checksumming fscrypt bios
		 */
		struct {
			struct btrfs_ordered_extent *ordered;
			struct btrfs_ordered_sum *sums;
			struct work_struct csum_work;
			struct completion csum_done;
			struct bvec_iter csum_saved_iter;
			u64 orig_physical;
			u64 orig_logical;
		};

		/* For metadata reads: parentness verification. */
		struct btrfs_tree_parent_check parent_check;
	};

	/* For internal use in read end I/O handling */
	struct work_struct end_io_work;

	/* End I/O information supplied to btrfs_bio_alloc */
	btrfs_bio_end_io_t end_io;
	void *private;

	atomic_t pending_ios;
	u16 mirror_num;

	/* Save the first error status of split bio. */
	blk_status_t status;

	/* Use the commit root to look up csums (data read bio only). */
	bool csum_search_commit_root:1;

	/*
	 * Since scrub will reuse btree inode, we need this flag to distinguish
	 * scrub bios.
	 */
	bool is_scrub:1;

	/* Whether the bio is coming from copy_remapped_data_io(). */
	bool is_remap:1;

	/* Whether the csum generation for data write is async. */
	bool async_csum:1;

	/* Whether the bio is written using zone append. */
	bool can_use_append:1;

	/*
	 * This member must come last, bio_alloc_bioset will allocate enough
	 * bytes for entire btrfs_bio but relies on bio being last.
	 */
	struct bio bio;
};

static inline struct btrfs_bio *btrfs_bio(struct bio *bio)
{
	return container_of(bio, struct btrfs_bio, bio);
}

int __init btrfs_bioset_init(void);
void __cold btrfs_bioset_exit(void);

Annotation

Implementation Notes