Re: [PATCH RFC 2/9] aio: Use accessor for hrtimer_sleeper ->task field
From: Jan Kara
Date: Fri Jul 31 2026 - 08:36:21 EST
On Thu 30-07-26 17:40:12, Paul E. McKenney wrote:
> The hrtimer_sleeper structure's ->task field is used as a flag to indicate
> that the associated hrtimer has expired. This means that the hrtimer
> handler can be storing to this field while other code is loading from it
> to check for expiry. Note that additional races appear for hrtimers that
> can be restarted, which could be argued to be a user error. However, that
> is no reason to let the compiler introduce additional confusion, and to
> this end, the hrtimer_sleeper_task_get() was introduced, use of which also
> has the benefit of avoiding open-code access to hrtimer_sleeper innards.
>
> KCSAN located this issue.
>
> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
> Cc: Benjamin LaHaise <bcrl@xxxxxxxxx>
> Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx>
> Cc: Christian Brauner <brauner@xxxxxxxxxx>
> Cc: Jan Kara <jack@xxxxxxx>
> Cc: Anna-Maria Behnsen <anna-maria@xxxxxxxxxxxxx>
> Cc: Frederic Weisbecker <frederic@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxx>
> Cc: <linux-aio@xxxxxxxxx>
> Cc: <linux-fsdevel@xxxxxxxxxxxxxxx>
Looks good. Feel free to add:
Acked-by: Jan Kara <jack@xxxxxxx>
Honza
> ---
> fs/aio.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/aio.c b/fs/aio.c
> index f57fa21a250353..e8cd65fce41eba 100644
> --- a/fs/aio.c
> +++ b/fs/aio.c
> @@ -1402,7 +1402,7 @@ static long read_events(struct kioctx *ctx, long min_nr, long nr,
> w.min_nr = min_nr - ret;
>
> ret2 = prepare_to_wait_event(&ctx->wait, &w.w, TASK_INTERRUPTIBLE);
> - if (!ret2 && !t.task)
> + if (!ret2 && !hrtimer_sleeper_task_get(&t))
> ret2 = -ETIME;
>
> if (aio_read_events(ctx, min_nr, nr, event, &ret) || ret2)
> --
> 2.40.1
>
--
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR