From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E6D3BCDB46F for ; Mon, 22 Jun 2026 04:06:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=ZUWyFEvXeVLfLgRyqSt5dzUpDWIXdvcmv/YrGiPhDm0=; b=ycASPnSfw53Soy0s9Z/UY6iUEF WSOyIyATzIrVzk5fJ36Yjtn9CvPc/PqPm0kxPaA5uKLCC++PRqGFpQVW00CnMJIynskO42b6ZS9ny P353GTz/b1KwkJ5T6Mzchcv8YiY7UQqVuTTv/K76hiJNbzdFafVmHJ7EGv28HR30cEpuuu57YQ3qN aUg+Nl4bSZVcPLXBprIT4cyECzKUpXjVCBe9yEzzlahgVkQQb1IMPDBDrCnLryioRvWcc+uK7rErk d1EeWoLYJOrVUYYCY5ZEu9I209Q2u16d7Xuf3ESic6ffTjLwv2fpHL4sVIY7VQLfOh7fthOtAFzcK wKEg0qZQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wbVvs-00000004O7q-1wvW; Mon, 22 Jun 2026 04:06:48 +0000 Received: from out-170.mta0.migadu.com ([2001:41d0:1004:224b::aa]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wbVvp-00000004O76-0GfN for kexec@lists.infradead.org; Mon, 22 Jun 2026 04:06:47 +0000 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1782101196; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ZUWyFEvXeVLfLgRyqSt5dzUpDWIXdvcmv/YrGiPhDm0=; b=oHrwj+SjzLCSYGSoHMsBlTyi/BPO1LYEAowZCiJy/BgfowxK1Nhv4wBnxGATzNJAQy2Usu 3Aui+a8Xl2VwYnUg4vaKt1jLEunHuuM12PdPzSO2e5i/XDE+X1RLFq1HeiZLctcF2EtPOU pEKF/++lDxrY0G4TuBJvKoXJ/NqYwTU= From: Kaitao Cheng To: 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=20K=C3=B6nig?= Cc: David Howells , Simona Vetter , Randy Dunlap , Luca Ceresoli , Philipp Stanner , linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org, linux-ntfs-dev@lists.sourceforge.net, linux-fsdevel@vger.kernel.org, io-uring@vger.kernel.org, audit@vger.kernel.org, bpf@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-perf-users@vger.kernel.org, linux-trace-kernel@vger.kernel.org, kexec@lists.infradead.org, live-patching@vger.kernel.org, linux-modules@vger.kernel.org, linux-crypto@vger.kernel.org, linux-pm@vger.kernel.org, rcu@vger.kernel.org, sched-ext@lists.linux.dev, linux-mm@kvack.org, virtualization@lists.linux.dev, damon@lists.linux.dev, llvm@lists.linux.dev, chengkaitao Subject: [PATCH v3 0/7] Prepare mutable list iterators to cache cursor state Date: Mon, 22 Jun 2026 12:05:30 +0800 Message-ID: <20260622040533.29824-1-kaitao.cheng@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260621_210645_765859_DFB898BD X-CRM114-Status: GOOD ( 16.90 ) X-BeenThere: kexec@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kexec" Errors-To: kexec-bounces+kexec=archiver.kernel.org@lists.infradead.org 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önig, 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(-) -- 2.43.0