fs/btrfs/ordered-data.h

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

File Facts

System
Linux kernel
Corpus path
fs/btrfs/ordered-data.h
Extension
.h
Size
7176 bytes
Lines
235
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_ordered_sum {
	/*
	 * Logical start address and length for of the blocks covered by
	 * the sums array.
	 */
	u64 logical;
	u32 len;

	struct list_head list;
	/* last field is a variable length array of csums */
	u8 sums[];
};

/*
 * Bits for btrfs_ordered_extent::flags.
 *
 * BTRFS_ORDERED_IO_DONE is set when all of the blocks are written.
 * It is used to make sure metadata is inserted into the tree only once
 * per extent.
 *
 * BTRFS_ORDERED_COMPLETE is set when the extent is removed from the
 * rbtree, just before waking any waiters.  It is used to indicate the
 * IO is done and any metadata is inserted into the tree.
 */
enum {
	/* Extra status bits for ordered extents */

	/* Set when all the pages are written. */
	BTRFS_ORDERED_IO_DONE,
	/* Set when removed from the tree. */
	BTRFS_ORDERED_COMPLETE,
	/* We had an io error when writing this out. */
	BTRFS_ORDERED_IOERR,
	/* Set when we have to truncate an extent. */
	BTRFS_ORDERED_TRUNCATED,
	/* Used during fsync to track already logged extents. */
	BTRFS_ORDERED_LOGGED,
	/* We have already logged all the csums of the ordered extent. */
	BTRFS_ORDERED_LOGGED_CSUM,
	/* We wait for this extent to complete in the current transaction. */
	BTRFS_ORDERED_PENDING,

	/*
	 * Different types for ordered extents, one and only one of these types
	 * need to be set when creating ordered extent.
	 *
	 * REGULAR:	For regular non-compressed COW write
	 * NOCOW:	For NOCOW write into existing non-hole extent
	 * PREALLOC:	For NOCOW write into preallocated extent
	 * COMPRESSED:	For compressed COW write
	 */
	BTRFS_ORDERED_REGULAR,
	BTRFS_ORDERED_NOCOW,
	BTRFS_ORDERED_PREALLOC,
	BTRFS_ORDERED_COMPRESSED,

	/* Extra bit for encoded write, must be set with COMPRESSED. */
	BTRFS_ORDERED_ENCODED,

	/*
	 * Extra bit for direct io, can only be set for
	 * REGULAR/NOCOW/PREALLOC. Must not be set for COMPRESSED nor ENCODED.
	 */
	BTRFS_ORDERED_DIRECT,

	BTRFS_ORDERED_NR_FLAGS,
};
static_assert(BTRFS_ORDERED_NR_FLAGS <= BITS_PER_LONG);

/* One and only one flag can be set. */
#define BTRFS_ORDERED_EXCLUSIVE_FLAGS ((1UL << BTRFS_ORDERED_REGULAR) |		\
				       (1UL << BTRFS_ORDERED_NOCOW) |		\
				       (1UL << BTRFS_ORDERED_PREALLOC) |	\
				       (1UL << BTRFS_ORDERED_COMPRESSED))

/* BTRFS_ORDERED_* flags that specify the type of the extent. */
#define BTRFS_ORDERED_TYPE_FLAGS (BTRFS_ORDERED_EXCLUSIVE_FLAGS |	\
				  (1UL << BTRFS_ORDERED_DIRECT) |	\
				  (1UL << BTRFS_ORDERED_ENCODED))

struct btrfs_ordered_extent {
	/* logical offset in the file */
	u64 file_offset;

	/*
	 * These fields directly correspond to the same fields in
	 * btrfs_file_extent_item.
	 */
	u64 num_bytes;
	u64 ram_bytes;

Annotation

Implementation Notes