Lines Matching refs:manager

109 	struct action_manager *manager;  in vdo_make_action_manager()  local
110 int result = vdo_allocate(1, struct action_manager, __func__, &manager); in vdo_make_action_manager()
115 *manager = (struct action_manager) { in vdo_make_action_manager()
124 manager->actions[0].next = &manager->actions[1]; in vdo_make_action_manager()
125 manager->current_action = manager->actions[1].next = in vdo_make_action_manager()
126 &manager->actions[0]; in vdo_make_action_manager()
127 vdo_set_admin_state_code(&manager->state, VDO_ADMIN_STATE_NORMAL_OPERATION); in vdo_make_action_manager()
128 vdo_initialize_completion(&manager->completion, vdo, VDO_ACTION_COMPLETION); in vdo_make_action_manager()
129 *manager_ptr = manager; in vdo_make_action_manager()
133 const struct admin_state_code *vdo_get_current_manager_operation(struct action_manager *manager) in vdo_get_current_manager_operation() argument
135 return vdo_get_admin_state_code(&manager->state); in vdo_get_current_manager_operation()
138 void *vdo_get_current_action_context(struct action_manager *manager) in vdo_get_current_action_context() argument
140 return manager->current_action->in_use ? manager->current_action->context : NULL; in vdo_get_current_action_context()
146 static thread_id_t get_acting_zone_thread_id(struct action_manager *manager) in get_acting_zone_thread_id() argument
148 return manager->get_zone_thread_id(manager->context, manager->acting_zone); in get_acting_zone_thread_id()
160 static void prepare_for_next_zone(struct action_manager *manager) in prepare_for_next_zone() argument
162 vdo_prepare_completion_for_requeue(&manager->completion, apply_to_zone, in prepare_for_next_zone()
164 get_acting_zone_thread_id(manager), in prepare_for_next_zone()
165 manager->current_action->parent); in prepare_for_next_zone()
168 static void prepare_for_conclusion(struct action_manager *manager) in prepare_for_conclusion() argument
170 vdo_prepare_completion_for_requeue(&manager->completion, finish_action_callback, in prepare_for_conclusion()
171 preserve_error, manager->initiator_thread_id, in prepare_for_conclusion()
172 manager->current_action->parent); in prepare_for_conclusion()
178 struct action_manager *manager = as_action_manager(completion); in apply_to_zone() local
180 VDO_ASSERT_LOG_ONLY((vdo_get_callback_thread_id() == get_acting_zone_thread_id(manager)), in apply_to_zone()
183 zone = manager->acting_zone++; in apply_to_zone()
184 if (manager->acting_zone == manager->zones) { in apply_to_zone()
189 prepare_for_conclusion(manager); in apply_to_zone()
192 prepare_for_next_zone(manager); in apply_to_zone()
195 manager->current_action->zone_action(manager->context, zone, completion); in apply_to_zone()
205 static void launch_current_action(struct action_manager *manager) in launch_current_action() argument
207 struct action *action = manager->current_action; in launch_current_action()
208 int result = vdo_start_operation(&manager->state, action->operation); in launch_current_action()
216 finish_action_callback(&manager->completion); in launch_current_action()
221 prepare_for_conclusion(manager); in launch_current_action()
223 manager->acting_zone = 0; in launch_current_action()
224 vdo_prepare_completion_for_requeue(&manager->completion, apply_to_zone, in launch_current_action()
226 get_acting_zone_thread_id(manager), in launch_current_action()
227 manager->current_action->parent); in launch_current_action()
230 action->preamble(manager->context, &manager->completion); in launch_current_action()
241 bool vdo_schedule_default_action(struct action_manager *manager) in vdo_schedule_default_action() argument
244 const struct admin_state_code *code = vdo_get_current_manager_operation(manager); in vdo_schedule_default_action()
247 manager->scheduler(manager->context)); in vdo_schedule_default_action()
254 struct action_manager *manager = as_action_manager(completion); in finish_action_callback() local
255 struct action action = *(manager->current_action); in finish_action_callback()
257 manager->current_action->in_use = false; in finish_action_callback()
258 manager->current_action = manager->current_action->next; in finish_action_callback()
265 (manager->current_action->in_use || vdo_schedule_default_action(manager)); in finish_action_callback()
266 result = action.conclusion(manager->context); in finish_action_callback()
267 vdo_finish_operation(&manager->state, VDO_SUCCESS); in finish_action_callback()
272 launch_current_action(manager); in finish_action_callback()
293 bool vdo_schedule_action(struct action_manager *manager, vdo_action_preamble_fn preamble, in vdo_schedule_action() argument
297 return vdo_schedule_operation(manager, VDO_ADMIN_STATE_OPERATING, preamble, in vdo_schedule_action()
320 bool vdo_schedule_operation(struct action_manager *manager, in vdo_schedule_operation() argument
326 return vdo_schedule_operation_with_context(manager, operation, preamble, action, in vdo_schedule_operation()
351 bool vdo_schedule_operation_with_context(struct action_manager *manager, in vdo_schedule_operation_with_context() argument
360 VDO_ASSERT_LOG_ONLY((vdo_get_callback_thread_id() == manager->initiator_thread_id), in vdo_schedule_operation_with_context()
362 if (!manager->current_action->in_use) { in vdo_schedule_operation_with_context()
363 current_action = manager->current_action; in vdo_schedule_operation_with_context()
364 } else if (!manager->current_action->next->in_use) { in vdo_schedule_operation_with_context()
365 current_action = manager->current_action->next; in vdo_schedule_operation_with_context()
384 if (current_action == manager->current_action) in vdo_schedule_operation_with_context()
385 launch_current_action(manager); in vdo_schedule_operation_with_context()