]> Git Repo - linux.git/blob - drivers/md/dm-vdo/logical-zone.h
Merge tag 'kbuild-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy...
[linux.git] / drivers / md / dm-vdo / logical-zone.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright 2023 Red Hat
4  */
5
6 #ifndef VDO_LOGICAL_ZONE_H
7 #define VDO_LOGICAL_ZONE_H
8
9 #include <linux/list.h>
10
11 #include "admin-state.h"
12 #include "int-map.h"
13 #include "types.h"
14
15 struct physical_zone;
16
17 struct 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 zone
34          * 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
55 struct 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
66 int __must_check vdo_make_logical_zones(struct vdo *vdo,
67                                         struct logical_zones **zones_ptr);
68
69 void vdo_free_logical_zones(struct logical_zones *zones);
70
71 void vdo_drain_logical_zones(struct logical_zones *zones,
72                              const struct admin_state_code *operation,
73                              struct vdo_completion *completion);
74
75 void vdo_resume_logical_zones(struct logical_zones *zones,
76                               struct vdo_completion *parent);
77
78 void vdo_increment_logical_zone_flush_generation(struct logical_zone *zone,
79                                                  sequence_number_t expected_generation);
80
81 void vdo_acquire_flush_generation_lock(struct data_vio *data_vio);
82
83 void vdo_release_flush_generation_lock(struct data_vio *data_vio);
84
85 struct physical_zone * __must_check vdo_get_next_allocation_zone(struct logical_zone *zone);
86
87 void vdo_dump_logical_zone(const struct logical_zone *zone);
88
89 #endif /* VDO_LOGICAL_ZONE_H */
This page took 0.038978 seconds and 4 git commands to generate.