From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9A83F35AC16 for ; Mon, 22 Jun 2026 05:28:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=209.85.215.179 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782106136; cv=pass; b=hTn5eo0W8p2MTE+mpVhLSl/jEqO7WTinzhyurEYdB88O2UiR26Zna7U9ypga2XBpCgh5cbniyrChPlIXEHu2P+NA2R0pxT2SL9c3xk803Os8lqUB5LiXRXqBZpylZI6/LsXA76ZjFdojsm9aTRm72OPXInt2u2N7leBYWS3rG5g= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782106136; c=relaxed/simple; bh=AVkOkRTtOGmOYW1/Vsdb3Eh/mWt3+SXrUWDOYCxFRJI=; h=MIME-Version:References:In-Reply-To:From:Date:Message-ID:Subject: To:Cc:Content-Type; b=qD950rrioX0AyaU7hEkLLDasZkxlcJCdeXiUdfGOC495+RgfQZpl7qoknavveGQOC+7kmbF90GgiEPJelyFkHfWFf0Aof7kJevKX9bAD8WDNA6tfE6niaiSMchTIkWuF0CdIpydYt9CS1YWydeceqUGZ9XPVZ/LY1SBbB+EXID4= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=oeYv79Ts; arc=pass smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oeYv79Ts" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-c85d8615b09so2705703a12.3 for ; Sun, 21 Jun 2026 22:28:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782106132; cv=none; d=google.com; s=arc-20240605; b=jNjXJBBkfbmQOe1VeOUt6Lnri+PWrE6Gjt718FctgZrNktogL9hhbwtLXhvS6/zuRb De6E/ZbP7lFFoTes5f/S1OOSWITjlvVxKmxUdthD2JId2zeRQoiZ2utU/5A6+IyUGh51 zJAzCaW3arEU5XP1p/DyvfoudZcJreyJELDHo9+SLYpVqf4qvjsAtu2zqZzJDK9CZI/o N0S06YP6x9yKSrcGxuuAG4N5e+Hbm7fNqPy0XdZTEaEip6l0kcKTMv041Evrx38iu7WI 9dXrSFn4hKaLD7oqbLrC8BD+MVduG17nbt4WcJqfCwKt3g9ZCFRQmSDJOPlmur+n6vZc XqJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=5KNOLAwZyaBThMY1NJgMdUSjBoVwiFJr4CThsL0B6VY=; fh=g9YTRSlJOlIYfZWk1feDGduiiKMsrzYCjYsjNtdrK7M=; b=Ql/fM17OaCCr/myAkUrEHEmHbav3e/3405mY5W7jS1uKJmXmSy6EP8bBLnNtpJcHLE 95WltWrWE3sYs9c09lnewidza4uTVQCF4EXjAY0lYgp87lAR8VoMMPB5SjksH1mYVomT 2hry5MXchXfbxhJRoRJHS4jZEcLa2SSwEWgBBjvAeU2FSsUR2s/xn0grrmEqKYS9zBru sKNNV3YECI5Qnwr3KO2XuIEnSd726oDaanZihd1YZvRk4NE05nd+WENjVgELnGYif9nm 0CrQwZla2Xs+EA1uwYyOp2AKxYspfRwZwl+neVHJwvohfZclaZUDdQWdZPoSK7wUJEuu lBfQ==; darn=vger.kernel.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782106132; x=1782710932; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=5KNOLAwZyaBThMY1NJgMdUSjBoVwiFJr4CThsL0B6VY=; b=oeYv79Tsn+qrKAgZY7z2kKZ/F5iVQ7fxdrCLTzHZMdKcAhFNnU/LhmEKscP5KSm7rU VIY/N5GiLu1Gxs8T3o/5LwrAOssUtzJ3QLjTVpXH19TUjCQ01tZi0sehg82Hl97Ac/Kv l5+iX4sQv17oWCxI0DvogCG3NASCrY6gdlfDpH6xCj5CABo8ImN+a6xSe9DzkQA+Q+z3 dJ1GksqpeYLNEcvCmiY0ExyB/5dq/RhVYE//ZeykE4wohNBEVooOBO+nPKkZa98zsRPw lj+Vr/Sd9wRzhQN5O6C1m7GwL8Jn6m8Rw6lb86x83ZuZNL6JDfQ7bXiZwUU2b7j3O+2e lndQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782106132; x=1782710932; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=5KNOLAwZyaBThMY1NJgMdUSjBoVwiFJr4CThsL0B6VY=; b=prBHf/WZe2APHzIC/+FxPILN5c57v0HX4T1FccD2zqQ2m4te5Ad5Gg7+ipVpY5e00e YRlEpA+kP4mE4SafBw+8lKu1Nh0zxWqRdxSVnPAwtcnYdqxxfRjZ0cfGUEGfQ4xRaCoe wrJFpUPtpskKbzxPqK1ZATCSCEc9CLeHm/z/76IU4siw8uwS/HkEza5m9J/ZrcRahq/t eXp6XO4fDRURvaCqTHBpeH9OqPftNAnbF5JL6P5AnRLacV9RzJYRSwfKT+RZ/dfknHw3 A463gFx1XWXJ0uIZ0/iTKMFeylei3/yAbRbqjidpzChYtMaXJLM5YSn+Tp0NQrBuMzlw 3GGw== X-Forwarded-Encrypted: i=1; AFNElJ+yTQ94kiOqYVWCx4yPyv7LXUF5yaciiREBqUuHWnFUFicdqxwXdEaZJsidwRNUFaJ6Js3Hg/c6OYuRRgo=@vger.kernel.org X-Gm-Message-State: AOJu0Yy8ZZSZB67DhzpB9DDR/ln4gy1yn73h8/VCw7YWv3xG8ohFM7VQ G6ALb2sI/y5V5M3K922cWAImkU0XzpRLR53zuFIOTaXCSXYDSICWdY12NPiMIanJ0YTHivFSPrO aLjliP7NyOGZaRRnzpClL32u0TB4fLE8= X-Gm-Gg: AfdE7ckxDmeOqTS3StWA2bBXbdBK0aqnbczmclNo0H9HNjXtWk6u7thWwHEb20jQIo1 drHslKL0gEyxMQOdPUbcZNsCcw2ldkXOzpAYJbtCL2c4dnR6QDNhwXaRj4vpiCJOK6GCW2g2Rgu y/fkx7S+0WtOSpN5Gq2z3K+HEEZNlMxUUaDfpMMbRE6Ja7KNSKEs37k3qWxhO6pSB1kRrq7RC5E GbK/53OXDvBFg5lbBAj52RxRlKbwmpmU4Bm1kiwDeJTmVmIYl0vMiuHAMByFl2fVcCmNIhahA63 sempbTLHKbYy2ND3kgAElC946eRNUHw1tocs802KxV+VsaD5KBe4IOJ97i0LWgfhasd7LZIj4PP hMpBQFTRAX8WIra/3XHWYB95p X-Received: by 2002:a05:6a21:9102:b0:3b7:b328:4c8b with SMTP id adf61e73a8af0-3bb3241d5bemr15602261637.19.1782106131632; Sun, 21 Jun 2026 22:28:51 -0700 (PDT) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20260622040533.29824-1-kaitao.cheng@linux.dev> In-Reply-To: <20260622040533.29824-1-kaitao.cheng@linux.dev> From: Alexei Starovoitov Date: Sun, 21 Jun 2026 22:28:40 -0700 X-Gm-Features: AVVi8CdydPWkgrsWeukABG1V_xsA12RL457Ae_ewOX27KaNNGTwhs0J8OHNbSBg Message-ID: Subject: Re: [PATCH v3 0/7] Prepare mutable list iterators to cache cursor state To: Kaitao Cheng Cc: Andrew Morton , David Hildenbrand , Jens Axboe , Tejun Heo , Alexander Viro , Christian Brauner , Alexei Starovoitov , Daniel Borkmann , Andrii Nakryiko , Johannes Weiner , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Namhyung Kim , Thomas Gleixner , Juri Lelli , Vincent Guittot , Paul Moore , Andy Shevchenko , "Paul E. McKenney" , Shakeel Butt , =?UTF-8?Q?Christian_K=C3=B6nig?= , David Howells , Simona Vetter , Randy Dunlap , Luca Ceresoli , Philipp Stanner , linux-block@vger.kernel.org, LKML , "open list:CONTROL GROUP (CGROUP)" , linux-ntfs-dev@lists.sourceforge.net, Linux-Fsdevel , io-uring , audit@vger.kernel.org, bpf , Network Development , dri-devel@lists.freedesktop.org, "linux-perf-use." , linux-trace-kernel , kexec@lists.infradead.org, live-patching@vger.kernel.org, linux-modules@vger.kernel.org, Linux Crypto Mailing List , Linux Power Management , rcu@vger.kernel.org, sched-ext@lists.linux.dev, linux-mm , virtualization@lists.linux.dev, damon@lists.linux.dev, clang-built-linux , chengkaitao Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jun 21, 2026 at 9:06=E2=80=AFPM Kaitao Cheng wrote: > > From: chengkaitao > > The list_for_each*_safe() helpers are used when the loop body may remove > the current entry. Their current interface, however, forces every caller > to define a temporary cursor outside the macro and pass it in, even when > the caller never uses that cursor directly. For most call sites this > extra cursor is just boilerplate required by the macro implementation. > > This is awkward because the saved next pointer is an internal detail of > the iteration. Callers that only remove or move the current entry do not > need to spell it out. > > The _safe() suffix has also caused confusion. Christian Koenig pointed > out that the name is easy to read as a thread-safe variant, especially > for beginners, even though it only means that the iterator keeps enough > state to tolerate removal of the current entry. He suggested _mutable() > as a clearer description of what the loop permits. > > Add *_mutable() iterator variants for list, hlist and llist. The new > helpers are variadic and support both forms. In the common case, the > caller omits the temporary cursor and the macro creates a unique internal > cursor with typeof(pos) and __UNIQUE_ID(). If a loop really needs an > explicit temporary cursor, the caller can still pass it and the helper > keeps the existing *_safe() behaviour. > > For example, a call site may use the shorter form: > > list_for_each_entry_mutable(pos, head, member) > > or keep the explicit temporary cursor form: > > list_for_each_entry_mutable(pos, tmp, head, member) > > The existing *_safe() helpers remain available for compatibility. This > series only converts users in mm, block, kernel, init and io_uring. If > this approach looks acceptable, the remaining users can be converted in > follow-up series. > > Changes in v3 (Christian K=C3=B6nig, Andy Shevchenko): > - Convert safe list walks to mutable iterators > > Changes in v2 (Muchun Song, Andy Shevchenko): > - Drop the list_for_each_entry_mutable*() helpers from v1 and make the > cursor change directly in the existing list_for_each_entry*() helpers. > - Open-code special list walks that rely on updating the loop cursor in > the body, preserving their existing traversal semantics. > > Link to v2: > https://lore.kernel.org/all/20260609061347.93688-1-kaitao.cheng@linux.dev= / > > Link to v1: > https://lore.kernel.org/all/20260529082149.76764-1-kaitao.cheng@linux.dev= / > > Kaitao Cheng (7): > list: Add mutable iterator variants > llist: Add mutable iterator variants > mm: Use mutable list iterators > block: Use mutable list iterators > kernel: Use mutable list iterators > initramfs: Use mutable list iterator > io_uring: Use mutable list iterators > > block/bfq-iosched.c | 17 +- > block/blk-cgroup.c | 12 +- > block/blk-flush.c | 4 +- > block/blk-iocost.c | 18 +- > block/blk-mq.c | 8 +- > block/blk-throttle.c | 4 +- > block/kyber-iosched.c | 4 +- > block/partitions/ldm.c | 8 +- > block/sed-opal.c | 4 +- > include/linux/list.h | 269 ++++++++++++++++++++++++---- > include/linux/llist.h | 81 +++++++-- > init/initramfs.c | 5 +- > io_uring/cancel.c | 6 +- > io_uring/poll.c | 3 +- > io_uring/rw.c | 4 +- > io_uring/timeout.c | 8 +- > io_uring/uring_cmd.c | 3 +- > kernel/audit_tree.c | 4 +- > kernel/audit_watch.c | 16 +- > kernel/auditfilter.c | 4 +- > kernel/auditsc.c | 4 +- > kernel/bpf/arena.c | 10 +- > kernel/bpf/arraymap.c | 8 +- > kernel/bpf/bpf_local_storage.c | 3 +- > kernel/bpf/bpf_lru_list.c | 25 ++- > kernel/bpf/btf.c | 18 +- > kernel/bpf/cgroup.c | 7 +- > kernel/bpf/cpumap.c | 4 +- > kernel/bpf/devmap.c | 10 +- > kernel/bpf/helpers.c | 8 +- > kernel/bpf/local_storage.c | 4 +- > kernel/bpf/memalloc.c | 16 +- > kernel/bpf/offload.c | 8 +- > kernel/bpf/states.c | 4 +- > kernel/bpf/stream.c | 4 +- > kernel/bpf/verifier.c | 6 +- > kernel/cgroup/cgroup-v1.c | 4 +- > kernel/cgroup/cgroup.c | 54 +++--- > kernel/cgroup/dmem.c | 12 +- > kernel/cgroup/rdma.c | 8 +- > kernel/events/core.c | 44 +++-- > kernel/events/uprobes.c | 12 +- > kernel/exit.c | 8 +- > kernel/fail_function.c | 4 +- > kernel/gcov/clang.c | 4 +- > kernel/irq_work.c | 4 +- > kernel/kexec_core.c | 4 +- > kernel/kprobes.c | 16 +- > kernel/livepatch/core.c | 4 +- > kernel/livepatch/core.h | 4 +- > kernel/liveupdate/kho_block.c | 4 +- > kernel/liveupdate/luo_flb.c | 4 +- > kernel/locking/rwsem.c | 2 +- > kernel/locking/test-ww_mutex.c | 2 +- > kernel/module/main.c | 11 +- > kernel/padata.c | 4 +- > kernel/power/snapshot.c | 8 +- > kernel/power/wakelock.c | 4 +- > kernel/printk/printk.c | 11 +- > kernel/ptrace.c | 4 +- > kernel/rcu/rcutorture.c | 3 +- > kernel/rcu/tasks.h | 9 +- > kernel/rcu/tree.c | 6 +- > kernel/resource.c | 4 +- > kernel/sched/core.c | 4 +- > kernel/sched/ext.c | 22 +-- > kernel/sched/fair.c | 28 +-- > kernel/sched/topology.c | 4 +- > kernel/sched/wait.c | 4 +- > kernel/seccomp.c | 4 +- > kernel/signal.c | 11 +- > kernel/smp.c | 4 +- > kernel/taskstats.c | 8 +- > kernel/time/clockevents.c | 6 +- > kernel/time/clocksource.c | 4 +- > kernel/time/posix-cpu-timers.c | 4 +- > kernel/time/posix-timers.c | 3 +- > kernel/torture.c | 3 +- > kernel/trace/bpf_trace.c | 4 +- > kernel/trace/ftrace.c | 49 +++-- > kernel/trace/ring_buffer.c | 25 ++- > kernel/trace/trace.c | 12 +- > kernel/trace/trace_dynevent.c | 6 +- > kernel/trace/trace_dynevent.h | 5 +- > kernel/trace/trace_events.c | 35 ++-- > kernel/trace/trace_events_filter.c | 4 +- > kernel/trace/trace_events_hist.c | 8 +- > kernel/trace/trace_events_trigger.c | 17 +- > kernel/trace/trace_events_user.c | 16 +- > kernel/trace/trace_stat.c | 4 +- > kernel/user-return-notifier.c | 3 +- > kernel/workqueue.c | 16 +- > mm/backing-dev.c | 8 +- > mm/balloon.c | 8 +- > mm/cma.c | 4 +- > mm/compaction.c | 4 +- > mm/damon/core.c | 4 +- > mm/damon/sysfs-schemes.c | 4 +- > mm/dmapool.c | 4 +- > mm/huge_memory.c | 8 +- > mm/hugetlb.c | 56 +++--- > mm/hugetlb_vmemmap.c | 16 +- > mm/khugepaged.c | 14 +- > mm/kmemleak.c | 7 +- > mm/ksm.c | 25 +-- > mm/list_lru.c | 4 +- > mm/memcontrol-v1.c | 8 +- > mm/memory-failure.c | 12 +- > mm/memory-tiers.c | 4 +- > mm/migrate.c | 23 ++- > mm/mmu_notifier.c | 9 +- > mm/page_alloc.c | 8 +- > mm/page_reporting.c | 2 +- > mm/percpu.c | 11 +- > mm/pgtable-generic.c | 4 +- > mm/rmap.c | 10 +- > mm/shmem.c | 9 +- > mm/slab_common.c | 14 +- > mm/slub.c | 33 ++-- > mm/swapfile.c | 4 +- > mm/userfaultfd.c | 12 +- > mm/vmalloc.c | 24 +-- > mm/vmscan.c | 7 +- > mm/zsmalloc.c | 4 +- > 124 files changed, 875 insertions(+), 681 deletions(-) Not sure what you were thinking, but this diff stat is not landable. pw-bot: cr