[lvc-project] [PATCH 6.12] io_uring/napi: fix io_napi_entry RCU accesses
Fedor Pchelkin
pchelkin at ispras.ru
Mon Nov 17 15:42:39 MSK 2025
On Wed, 12. Nov 14:37, Stepan Artuhov wrote:
> From: Olivier Langlois <olivier at trillion01.com>
>
> [Upstream commit 45b3941d09d13b3503309be1f023b83deaf69b4d ]
К формату этой строки чувствительны скрипты по обработке бэкпорт-патчей.
Допускается две формы, просьба писать одну из них по возможности без
опечаток:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html#option-3
Ещё комментарий см. ниже.
>
> correct 3 RCU structures modifications that were not using the RCU
> functions to make their update.
>
> Cc: Jens Axboe <axboe at kernel.dk>
> Cc: Pavel Begunkov <asml.silence at gmail.com>
> Cc: io-uring at vger.kernel.org
> Cc: linux-kernel at vger.kernel.org
> Cc: lvc-project at linuxtesting.org
> Signed-off-by: Olivier Langlois <olivier at trillion01.com>
> Link: https://lore.kernel.org/r/9f53b5169afa8c7bf3665a0b19dc2f7061173530.1728828877.git.olivier@trillion01.com
> Signed-off-by: Jens Axboe <axboe at kernel.dk>
> [Stepan Artuhov: cherry-picked a commit]
> Signed-off-by: Stepan Artuhov <s.artuhov at tssltd.ru>
> ---
> io_uring/napi.c | 19 ++++++++++++-------
> 1 file changed, 12 insertions(+), 7 deletions(-)
>
> diff --git a/io_uring/napi.c b/io_uring/napi.c
> index d0cf694d0172..fa959fd32042 100644
> --- a/io_uring/napi.c
> +++ b/io_uring/napi.c
> @@ -81,19 +81,24 @@ void __io_napi_add(struct io_ring_ctx *ctx, struct socket *sock)
> }
>
> hlist_add_tail_rcu(&e->node, hash_list);
> - list_add_tail(&e->list, &ctx->napi_list);
> + list_add_tail_rcu(&e->list, &ctx->napi_list);
> spin_unlock(&ctx->napi_lock);
> }
>
> static void __io_napi_remove_stale(struct io_ring_ctx *ctx)
> {
> struct io_napi_entry *e;
> - unsigned int i;
>
> spin_lock(&ctx->napi_lock);
> - hash_for_each(ctx->napi_ht, i, e, node) {
> - if (time_after(jiffies, e->timeout)) {
> - list_del(&e->list);
> + /*
> + * list_for_each_entry_safe() is not required as long as:
> + * 1. list_del_rcu() does not reset the deleted node next pointer
> + * 2. kfree_rcu() delays the memory freeing until the next quiescent
> + * state
> + */
> + list_for_each_entry(e, &ctx->napi_list, list) {
> + if (time_after(jiffies, READ_ONCE(e->timeout))) {
Переносимый сейчас коммит не делал перевод к READ_ONCE(). Это осуществил
коммит 2f3cc8e441c9 ("io_uring/napi: protect concurrent io_napi_entry
timeout accesses"). Если хочется сделать перевод к READ_ONCE() - оно
видимо не будет лишним - то стоит перенести упомянутый коммит отдельным
патчем. Оформить это можно в виде серии из двух патчей: первый -
бэкпорт 2f3cc8e441c9, второй - бэкпорт 45b3941d09d1.
Отправить просьба только по адресу lvc-patches at linuxtesting.org. Межд.
сообщество не реагирует на бэкпорты.
Перед финальной отправкой git send-email печатает список адресатов, кому
пойдёт патч. Там автоматически окажутся ещё адресаты из тела патча, из
можно убрать добавкой опции --suppress-cc
https://portal.linuxtesting.ru/How-to-send-patches-to-kernel.html#Отправка
> + list_del_rcu(&e->list);
> hash_del_rcu(&e->node);
> kfree_rcu(e, rcu);
> }
> @@ -204,13 +209,13 @@ void io_napi_init(struct io_ring_ctx *ctx)
> void io_napi_free(struct io_ring_ctx *ctx)
> {
> struct io_napi_entry *e;
> - unsigned int i;
>
> spin_lock(&ctx->napi_lock);
> - hash_for_each(ctx->napi_ht, i, e, node) {
> + list_for_each_entry(e, &ctx->napi_list, list) {
> hash_del_rcu(&e->node);
> kfree_rcu(e, rcu);
> }
> + INIT_LIST_HEAD_RCU(&ctx->napi_list);
> spin_unlock(&ctx->napi_lock);
> }
>
> --
> 2.39.5
More information about the lvc-project
mailing list