drivers/md/dm-vdo/logical-zone.h

Source file repositories/reference/linux-study-clean/drivers/md/dm-vdo/logical-zone.h

File Facts

System
Linux kernel
Corpus path
drivers/md/dm-vdo/logical-zone.h
Extension
.h
Size
2762 bytes
Lines
90
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 logical_zone {
	/* The completion for flush notifications */
	struct vdo_completion completion;
	/* The owner of this zone */
	struct logical_zones *zones;
	/* Which logical zone this is */
	zone_count_t zone_number;
	/* The thread id for this zone */
	thread_id_t thread_id;
	/* In progress operations keyed by LBN */
	struct int_map *lbn_operations;
	/* The logical to physical map */
	struct block_map_zone *block_map_zone;
	/* The current flush generation */
	sequence_number_t flush_generation;
	/*
	 * The oldest active generation in this zone. This is mutated only on the logical zone
	 * thread but is queried from the flusher thread.
	 */
	sequence_number_t oldest_active_generation;
	/* The number of IOs in the current flush generation */
	block_count_t ios_in_flush_generation;
	/* The youngest generation of the current notification */
	sequence_number_t notification_generation;
	/* Whether a notification is in progress */
	bool notifying;
	/* The queue of active data write VIOs */
	struct list_head write_vios;
	/* The administrative state of the zone */
	struct admin_state state;
	/* The physical zone from which to allocate */
	struct physical_zone *allocation_zone;
	/* The number of allocations done from the current allocation_zone */
	block_count_t allocation_count;
	/* The next zone */
	struct logical_zone *next;
};

struct logical_zones {
	/* The vdo whose zones these are */
	struct vdo *vdo;
	/* The manager for administrative actions */
	struct action_manager *manager;
	/* The number of zones */
	zone_count_t zone_count;
	/* The logical zones themselves */
	struct logical_zone zones[] __counted_by(zone_count);
};

int __must_check vdo_make_logical_zones(struct vdo *vdo,
					struct logical_zones **zones_ptr);

void vdo_free_logical_zones(struct logical_zones *zones);

void vdo_drain_logical_zones(struct logical_zones *zones,
			     const struct admin_state_code *operation,
			     struct vdo_completion *completion);

void vdo_resume_logical_zones(struct logical_zones *zones,
			      struct vdo_completion *parent);

void vdo_increment_logical_zone_flush_generation(struct logical_zone *zone,
						 sequence_number_t expected_generation);

void vdo_acquire_flush_generation_lock(struct data_vio *data_vio);

void vdo_release_flush_generation_lock(struct data_vio *data_vio);

struct physical_zone * __must_check vdo_get_next_allocation_zone(struct logical_zone *zone);

void vdo_dump_logical_zone(const struct logical_zone *zone);

#endif /* VDO_LOGICAL_ZONE_H */

Annotation

Implementation Notes