drivers/md/dm-vdo/action-manager.h
Source file repositories/reference/linux-study-clean/drivers/md/dm-vdo/action-manager.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/md/dm-vdo/action-manager.h- Extension
.h- Size
- 4192 bytes
- Lines
- 111
- 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.
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
admin-state.htypes.h
Detected Declarations
struct action_manager
Annotated Snippet
#ifndef VDO_ACTION_MANAGER_H
#define VDO_ACTION_MANAGER_H
#include "admin-state.h"
#include "types.h"
/*
* An action_manager provides a generic mechanism for applying actions to multi-zone entities (such
* as the block map or slab depot). Each action manager is tied to a specific context for which it
* manages actions. The manager ensures that only one action is active on that context at a time,
* and supports at most one pending action. Calls to schedule an action when there is already a
* pending action will result in VDO_COMPONENT_BUSY errors. Actions may only be submitted to the
* action manager from a single thread (which thread is determined when the action manager is
* constructed).
*
* A scheduled action consists of four components:
*
* preamble
* an optional method to be run on the initiator thread before applying the action to all zones
* zone_action
* an optional method to be applied to each of the zones
* conclusion
* an optional method to be run on the initiator thread once the per-zone method has been
* applied to all zones
* parent
* an optional completion to be finished once the conclusion is done
*
* At least one of the three methods must be provided.
*/
/*
* A function which is to be applied asynchronously to a set of zones.
* @context: The object which holds the per-zone context for the action
* @zone_number: The number of zone to which the action is being applied
* @parent: The object to notify when the action is complete
*/
typedef void (*vdo_zone_action_fn)(void *context, zone_count_t zone_number,
struct vdo_completion *parent);
/*
* A function which is to be applied asynchronously on an action manager's initiator thread as the
* preamble of an action.
* @context: The object which holds the per-zone context for the action
* @parent: The object to notify when the action is complete
*/
typedef void (*vdo_action_preamble_fn)(void *context, struct vdo_completion *parent);
/*
* A function which will run on the action manager's initiator thread as the conclusion of an
* action.
* @context: The object which holds the per-zone context for the action
*
* Return: VDO_SUCCESS or an error
*/
typedef int (*vdo_action_conclusion_fn)(void *context);
/*
* A function to schedule an action.
* @context: The object which holds the per-zone context for the action
*
* Return: true if an action was scheduled
*/
typedef bool (*vdo_action_scheduler_fn)(void *context);
/*
* A function to get the id of the thread associated with a given zone.
* @context: The action context
* @zone_number: The number of the zone for which the thread ID is desired
*/
typedef thread_id_t (*vdo_zone_thread_getter_fn)(void *context, zone_count_t zone_number);
struct action_manager;
int __must_check vdo_make_action_manager(zone_count_t zones,
vdo_zone_thread_getter_fn get_zone_thread_id,
thread_id_t initiator_thread_id, void *context,
vdo_action_scheduler_fn scheduler,
struct vdo *vdo,
struct action_manager **manager_ptr);
const struct admin_state_code *__must_check
vdo_get_current_manager_operation(struct action_manager *manager);
void * __must_check vdo_get_current_action_context(struct action_manager *manager);
bool vdo_schedule_default_action(struct action_manager *manager);
bool vdo_schedule_action(struct action_manager *manager, vdo_action_preamble_fn preamble,
vdo_zone_action_fn action, vdo_action_conclusion_fn conclusion,
struct vdo_completion *parent);
Annotation
- Immediate include surface: `admin-state.h`, `types.h`.
- Detected declarations: `struct action_manager`.
- Atlas domain: Driver Families / drivers/md.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.