drivers/md/dm-vdo/indexer/geometry.h

Source file repositories/reference/linux-study-clean/drivers/md/dm-vdo/indexer/geometry.h

File Facts

System
Linux kernel
Corpus path
drivers/md/dm-vdo/indexer/geometry.h
Extension
.h
Size
4688 bytes
Lines
141
Domain
Driver Families
Bucket
drivers/md
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct index_geometry {
	/* Size of a chapter page, in bytes */
	size_t bytes_per_page;
	/* Number of record pages in a chapter */
	u32 record_pages_per_chapter;
	/* Total number of chapters in a volume */
	u32 chapters_per_volume;
	/* Number of sparsely-indexed chapters in a volume */
	u32 sparse_chapters_per_volume;
	/* Number of bits used to determine delta list numbers */
	u8 chapter_delta_list_bits;
	/* Virtual chapter remapped from physical chapter 0 */
	u64 remapped_virtual;
	/* New physical chapter where the remapped chapter can be found */
	u64 remapped_physical;

	/*
	 * The following properties are derived from the ones above, but they are computed and
	 * recorded as fields for convenience.
	 */
	/* Total number of pages in a volume, excluding the header */
	u32 pages_per_volume;
	/* Total number of bytes in a volume, including the header */
	size_t bytes_per_volume;
	/* Number of pages in a chapter */
	u32 pages_per_chapter;
	/* Number of index pages in a chapter index */
	u32 index_pages_per_chapter;
	/* Number of records that fit on a page */
	u32 records_per_page;
	/* Number of records that fit in a chapter */
	u32 records_per_chapter;
	/* Number of records that fit in a volume */
	u64 records_per_volume;
	/* Number of delta lists per chapter index */
	u32 delta_lists_per_chapter;
	/* Mean delta for chapter indexes */
	u32 chapter_mean_delta;
	/* Number of bits needed for record page numbers */
	u8 chapter_payload_bits;
	/* Number of bits used to compute addresses for chapter delta lists */
	u8 chapter_address_bits;
	/* Number of densely-indexed chapters in a volume */
	u32 dense_chapters_per_volume;
};

enum {
	/* The number of bytes in a record (name + metadata) */
	BYTES_PER_RECORD = (UDS_RECORD_NAME_SIZE + UDS_RECORD_DATA_SIZE),

	/* The default length of a page in a chapter, in bytes */
	DEFAULT_BYTES_PER_PAGE = 1024 * BYTES_PER_RECORD,

	/* The default maximum number of records per page */
	DEFAULT_RECORDS_PER_PAGE = DEFAULT_BYTES_PER_PAGE / BYTES_PER_RECORD,

	/* The default number of record pages in a chapter */
	DEFAULT_RECORD_PAGES_PER_CHAPTER = 256,

	/* The default number of record pages in a chapter for a small index */
	SMALL_RECORD_PAGES_PER_CHAPTER = 64,

	/* The default number of chapters in a volume */
	DEFAULT_CHAPTERS_PER_VOLUME = 1024,

	/* The default number of sparsely-indexed chapters in a volume */
	DEFAULT_SPARSE_CHAPTERS_PER_VOLUME = 0,

	/* The log2 of the default mean delta */
	DEFAULT_CHAPTER_MEAN_DELTA_BITS = 16,

	/* The log2 of the number of delta lists in a large chapter */
	DEFAULT_CHAPTER_DELTA_LIST_BITS = 12,

	/* The log2 of the number of delta lists in a small chapter */
	SMALL_CHAPTER_DELTA_LIST_BITS = 10,

	/* The number of header pages per volume */
	HEADER_PAGES_PER_VOLUME = 1,
};

int __must_check uds_make_index_geometry(size_t bytes_per_page, u32 record_pages_per_chapter,
					 u32 chapters_per_volume,
					 u32 sparse_chapters_per_volume, u64 remapped_virtual,
					 u64 remapped_physical,
					 struct index_geometry **geometry_ptr);

int __must_check uds_copy_index_geometry(struct index_geometry *source,
					 struct index_geometry **geometry_ptr);

Annotation

Implementation Notes