flush_work(9)
π NAME π
From the Kernel API Manual, bestie: flush_work β wait for a work to finish executing the last queueing instance. That's the whole assignment, and it ate. π
β¨ SYNOPSIS β¨
bool flush_work (struct work_struct *work );
π ARGUMENTS π
workβ the work to flush. Like, the actualstruct work_struct *you're waiting on, bestie. π«Ά
π¦ DESCRIPTION π¦
Okay so here's the tea: flush_work waits until work has finished execution. On return, work is guaranteed to be idle if it hasn't been requeued since flush started. That conditional is literally the whole caveat, so don't ghost it. π
π RETURN π
It returns a bool, and it's giving very clear signals:
trueβflush_workwaited for the work to finish execution.falseβ it was already idle.
No mystery, no cap. π
π SEE ALSO π
Kernel file ./kernel/workqueue.c is the mothership, and these are the whole friend group:
for_each_pool(9),for_each_pool_worker(9),for_each_pwq(9),worker_pool_assign_id(9)unbound_effective_cpumask(9),get_work_pool(9),worker_set_flags(9),worker_clr_flags(9)worker_enter_idle(9),worker_leave_idle(9),find_worker_executing_work(9),move_linked_works(9)assign_work(9),kick_pool_pick(9),kick_pool(9),wq_worker_running(9)wq_worker_sleeping(9),wq_worker_tick(9),wq_worker_last_func(9),wq_node_nr_active(9)wq_update_node_max_active(9),get_pwq(9),put_pwq(9),put_pwq_unlocked(9)pwq_tryinc_nr_active(9),pwq_activate_first_inactive(9),unplug_oldest_pwq(9),node_activate_pending_pwq(9)pwq_dec_nr_active(9),pwq_dec_nr_in_flight(9),try_to_grab_pending(9),work_grab_pending(9)insert_work(9),queue_work_on(9),select_numa_node_cpu(9),queue_work_node(9)queue_delayed_work_on(9),mod_delayed_work_on(9),queue_rcu_work(9),worker_attach_to_pool(9)worker_detach_from_pool(9),create_worker(9),set_worker_dying(9),idle_worker_timeout(9)idle_cull_fn(9),maybe_create_worker(9),manage_workers(9),process_one_work(9)process_scheduled_works(9),worker_thread(9),rescuer_thread(9),check_flush_dependency(9)insert_wq_barrier(9),flush_workqueue_prep_pwqs(9),__flush_workqueue(9),drain_workqueue(9)flush_delayed_work(9),flush_rcu_work(9),cancel_work_sync(9),cancel_delayed_work(9)cancel_delayed_work_sync(9),disable_work(9),disable_work_sync(9),enable_work(9)disable_delayed_work(9),disable_delayed_work_sync(9),enable_delayed_work(9),schedule_on_each_cpu(9)execute_in_process_context(9),free_workqueue_attrs(9),alloc_workqueue_attrs(9),init_worker_pool(9)put_unbound_pool(9),get_unbound_pool(9),wq_calc_pod_cpumask(9),apply_workqueue_attrs(9)unbound_wq_update_pwq(9),wq_adjust_max_active(9),destroy_workqueue(9),workqueue_set_max_active(9)workqueue_set_min_active(9),current_work(9),current_is_workqueue_rescuer(9),current_is_workqueue_mem_reclaim(9)workqueue_congested(9),work_busy(9),set_worker_desc(9),print_worker_info(9)show_one_workqueue(9),show_one_worker_pool(9),show_all_workqueues(9),show_freezable_workqueues(9)rebind_workers(9),restore_unbound_workers_cpumask(9),work_on_cpu_key(9),freeze_workqueues_begin(9)freeze_workqueues_busy(9),thaw_workqueues(9),workqueue_unbound_housekeeping_update(9),workqueue_set_unbound_cpumask(9)workqueue_sysfs_register(9),workqueue_sysfs_unregister(9),workqueue_init_early(9),workqueue_init(9)llc_count_cores(9),llc_populate_cpu_shard_id(9),precompute_cache_shard_ids(9),workqueue_init_topology(9)
Sign-off, bestie: this page's source/version is ./kernel, and it's dated October 2026. It's the flush_work(9) page, and it's iconic. Stay hydrated, keep your work idle, and may your conditional guarantees stay valid. πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms