Re: [PATCH v1 RESEND 2/4] rust: add Work::disable_sync

From: Alice Ryhl

Date: Fri Mar 13 2026 - 08:01:51 EST


On Fri, Mar 13, 2026 at 10:17 AM Onur Özkan <work@xxxxxxxxxxxxx> wrote:
>
> Add Work::disable_sync() as a safe wrapper for disable_work_sync().
>
> Drivers can use this during teardown to stop new queueing and wait for
> queued or running work to finish before dropping related resources.
>
> Tested-by: Deborah Brouwer <deborah.brouwer@xxxxxxxxxxxxx>
> Signed-off-by: Onur Özkan <work@xxxxxxxxxxxxx>
> ---
> rust/kernel/workqueue.rs | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
> index 706e833e9702..6acc7b5ba31c 100644
> --- a/rust/kernel/workqueue.rs
> +++ b/rust/kernel/workqueue.rs
> @@ -530,6 +530,21 @@ pub unsafe fn raw_get(ptr: *const Self) -> *mut bindings::work_struct {
> // the compiler does not complain that the `work` field is unused.
> unsafe { Opaque::cast_into(core::ptr::addr_of!((*ptr).work)) }
> }
> +
> + /// Disables this work item and waits for queued/running executions to finish.
> + ///
> + /// # Safety
> + ///
> + /// Must be called from a sleepable context if the work was last queued on a non-BH
> + /// workqueue.

We generally do not make functions unsafe just because they might sleep.

Alice