brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 1b666c8 Raw
90 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2023 Red Hat4 */5 6#ifndef VDO_LOGICAL_ZONE_H7#define VDO_LOGICAL_ZONE_H8 9#include <linux/list.h>10 11#include "admin-state.h"12#include "int-map.h"13#include "types.h"14 15struct physical_zone;16 17struct logical_zone {18	/* The completion for flush notifications */19	struct vdo_completion completion;20	/* The owner of this zone */21	struct logical_zones *zones;22	/* Which logical zone this is */23	zone_count_t zone_number;24	/* The thread id for this zone */25	thread_id_t thread_id;26	/* In progress operations keyed by LBN */27	struct int_map *lbn_operations;28	/* The logical to physical map */29	struct block_map_zone *block_map_zone;30	/* The current flush generation */31	sequence_number_t flush_generation;32	/*33	 * The oldest active generation in this zone. This is mutated only on the logical zone34	 * thread but is queried from the flusher thread.35	 */36	sequence_number_t oldest_active_generation;37	/* The number of IOs in the current flush generation */38	block_count_t ios_in_flush_generation;39	/* The youngest generation of the current notification */40	sequence_number_t notification_generation;41	/* Whether a notification is in progress */42	bool notifying;43	/* The queue of active data write VIOs */44	struct list_head write_vios;45	/* The administrative state of the zone */46	struct admin_state state;47	/* The physical zone from which to allocate */48	struct physical_zone *allocation_zone;49	/* The number of allocations done from the current allocation_zone */50	block_count_t allocation_count;51	/* The next zone */52	struct logical_zone *next;53};54 55struct logical_zones {56	/* The vdo whose zones these are */57	struct vdo *vdo;58	/* The manager for administrative actions */59	struct action_manager *manager;60	/* The number of zones */61	zone_count_t zone_count;62	/* The logical zones themselves */63	struct logical_zone zones[];64};65 66int __must_check vdo_make_logical_zones(struct vdo *vdo,67					struct logical_zones **zones_ptr);68 69void vdo_free_logical_zones(struct logical_zones *zones);70 71void vdo_drain_logical_zones(struct logical_zones *zones,72			     const struct admin_state_code *operation,73			     struct vdo_completion *completion);74 75void vdo_resume_logical_zones(struct logical_zones *zones,76			      struct vdo_completion *parent);77 78void vdo_increment_logical_zone_flush_generation(struct logical_zone *zone,79						 sequence_number_t expected_generation);80 81void vdo_acquire_flush_generation_lock(struct data_vio *data_vio);82 83void vdo_release_flush_generation_lock(struct data_vio *data_vio);84 85struct physical_zone * __must_check vdo_get_next_allocation_zone(struct logical_zone *zone);86 87void vdo_dump_logical_zone(const struct logical_zone *zone);88 89#endif /* VDO_LOGICAL_ZONE_H */90