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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41419C83F17 for ; Tue, 15 Jul 2025 17:29:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BC5B96B0095; Tue, 15 Jul 2025 13:29:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B75286B0096; Tue, 15 Jul 2025 13:29:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A646B6B0098; Tue, 15 Jul 2025 13:29:44 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 90C886B0095 for ; Tue, 15 Jul 2025 13:29:44 -0400 (EDT) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 4816E80112 for ; Tue, 15 Jul 2025 17:29:44 +0000 (UTC) X-FDA: 83667186288.14.3E736C7 Received: from mail-pg1-f176.google.com (mail-pg1-f176.google.com [209.85.215.176]) by imf20.hostedemail.com (Postfix) with ESMTP id 626611C0012 for ; Tue, 15 Jul 2025 17:29:42 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QLNiKf4X; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752600582; a=rsa-sha256; cv=none; b=TSbdmgHvyYQjKTbZ0AGc1KS3teFZliBYwrzGol5nGtSdxFsCojqXlylJVFQwWB4rSCd5Cq o/PgTRehaECiLsSAYZVGCwYWrQdPuL7Cje4+xCXtTvtRNSlIVPfuozh+YMPvId6Ta4FDIO kXK604nsCpnuBzxuM9ZncL6wSz6/WXU= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=QLNiKf4X; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf20.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.176 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752600582; h=from:from:sender: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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=wc903ng5sV3+K5886ssk/NI8G/f9wB2jD4krWuXRVgg=; b=L4cB6CYxLPl4MigNYKT/SOTrwyK/seH3qi+ciVKb7+Rp/qmsC/U+a1nCFAS2uNfCdasApC boWX75yQjYdQrl11VRzfYpmsCE6fqUxIrZGY5wZUOsPxnINglfpTbRd5HS1cfQch+L9Xcj Cqd/vqZUcoMjNx4equ29VVZXhBeMR7s= Received: by mail-pg1-f176.google.com with SMTP id 41be03b00d2f7-b3508961d43so5159100a12.3 for ; Tue, 15 Jul 2025 10:29:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752600581; x=1753205381; darn=kvack.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=wc903ng5sV3+K5886ssk/NI8G/f9wB2jD4krWuXRVgg=; b=QLNiKf4XvnzNRX/RRwzrZRj8O3UB/sKvc1OuHz7D/bqPYslL/+LyvtOiUS27mPOfId ZErJxkZRDDZxV/+GCsK53Tc6zVcU5zml5HvDTJUfyN3/RW3nvxAapr4GkxX0RQSoStA1 OH9ONed6Ix+xOshxwpmSEdY4IqanENqR3r4vRZNfHWN8dNu/oebPGWNEc9e0p7jlNhmn EUi7TY3W9Z9XJlQrWffzmr5kD81HzVj1gi7PbBSR3o9j17pi7T8vAIDdQlV6/N0uRBX4 p8pX7e2bttbmXRgYLn99cmOjqwkcF09RqkVrjww9ncQ1vMGo1BTdx3UhJbr5pK17gVqY oDDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752600581; x=1753205381; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wc903ng5sV3+K5886ssk/NI8G/f9wB2jD4krWuXRVgg=; b=EIkIyOfVXR33Ir9L8akLd8jH4ZNC9dUEBh4d7kcz6sf68k+PKzmucxTKMPxQDNS48S 2RcZlQltiA2QR/ReNsZ8Exo5F46HYQq3Mg4ptS5x+0/ibHA4IEvz/pxTtLseL3tNtYpB r26zaEJwk88ftUJc6YzaXpnKlat320tQI4oehchWKQPA/oHksS48tE0i1B+De4EQZlwa JNNdDbA2VzqzEp0EXyDC0wZn0G6kbdRiyeDd5GHwiHRCSTHk/8i/mePZf4t0NpgQxj1k 7nbENmbPZ0aa6RuZbL6W2x63fdSpI04/O1R4U3HLLntXxbWii+GhQcX7RudrlemoUGXy kZnw== X-Forwarded-Encrypted: i=1; AJvYcCUEjQVuKyASwvF2UfNc9Gq4r8P8qq/WwFRI2iplSyvGRock8blV0+J5FYWq0HMeciWhKxL6jJix3g==@kvack.org X-Gm-Message-State: AOJu0YzbKbyF0a6PB+Dy2KmiJsHMvcoPIFB9l0UmtONCZWZtjUQVvdKs yxW1Nm8yVydHaqowjPVSymsqqos3byX1Aujp5yt8VSsW/WbFmtUllUHZp1P06cH7bzJ9vNIn39u b8FuGNkTxUqZoxmAXYFd06Y0dUI2EeKI= X-Gm-Gg: ASbGncvwLZYvuCsX2KNvNIahY0L+X6fiU7UvTeQxup9zVRGU/Oo4qiFwHE6y+BsTb3B x4GDpPFIxbQwLMSPb9RAaUwbfQZhqqH3Y9AJlq01JTEKFi9g6Q6J2w9QsFLlrIxNhqF5O1vPeB9 n3X0JT9A/OlGES91+ZH11FHJNJDEtI0bSiSeH131BAh1zKhj3L2w76XexX69Y8HqS6TiVCTVF0f vLhKWgUZKC/VzkypFZUqY4= X-Google-Smtp-Source: AGHT+IFV88ZsnMSrkKMCH3CvZnEcbNhiDbfsajxpa2V0A5Yj6GokzkBemYmOXveEA3RZ+tMFxpnloTbZg9BkrWKCBIc= X-Received: by 2002:a17:90b:134e:b0:311:df4b:4b93 with SMTP id 98e67ed59e1d1-31c9e6e4061mr52933a91.7.1752600581083; Tue, 15 Jul 2025 10:29:41 -0700 (PDT) MIME-Version: 1.0 References: <5ec10376-6a5f-4a94-9880-e59f1b6d425f@suse.cz> <19d46c33-bd5e-41d1-88ad-3db071fa1bed@lucifer.local> <0b8617c1-a150-426f-8fa6-9ab3b5bcfa1e@redhat.com> <8026c455-6237-47e3-98af-e3acb90dba25@suse.cz> <5f8d3100-a0dd-4da3-8797-f097e063ca97@lucifer.local> <7568edfa-6992-452d-9eb2-2497221cb22a@lucifer.local> <7d878566-f445-4fc2-9d04-eb8b38024c9b@lucifer.local> In-Reply-To: <7d878566-f445-4fc2-9d04-eb8b38024c9b@lucifer.local> From: Andrii Nakryiko Date: Tue, 15 Jul 2025 10:29:26 -0700 X-Gm-Features: Ac12FXyKCi8yfm9zpEz0p2N_Fds77kWBfr-mDczWqrvQScCzLL70RGcrvxh5Qp8 Message-ID: Subject: Re: [PATCH v6 7/8] fs/proc/task_mmu: read proc/pid/maps under per-vma lock To: Lorenzo Stoakes Cc: Vlastimil Babka , David Hildenbrand , Suren Baghdasaryan , "Liam R. Howlett" , akpm@linux-foundation.org, peterx@redhat.com, jannh@google.com, hannes@cmpxchg.org, mhocko@kernel.org, paulmck@kernel.org, shuah@kernel.org, adobriyan@gmail.com, brauner@kernel.org, josef@toxicpanda.com, yebin10@huawei.com, linux@weissschuh.net, willy@infradead.org, osalvador@suse.de, andrii@kernel.org, ryan.roberts@arm.com, christophe.leroy@csgroup.eu, tjmercier@google.com, kaleshsingh@google.com, aha310510@gmail.com, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 626611C0012 X-Stat-Signature: sinnq4trm75ttekpim6tefsrwhwre8hn X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1752600582-442631 X-HE-Meta: U2FsdGVkX18kNARvsrWhi4RNQkJLWiu2HtVY/SyL7HlCm0lRboywiwJipL7sGz848UqAM9qEMEdE+HqLVueAwawZVtWoMM5cWhdpsepPCwe6goYdhQHOWLkVyKPpIPLObiJVi0eGcO9Su+VdGeUZUaZMA8qI9lpXPVOaI6LXAJUZm6B8HzmuQu2xshZuAQiuj8ISxX743QPilaOIXbJlXzOr2HcMCVWMjrzRDMnO9JbTqW+Y6dBg3HYWS27slQL7iMsqmDfzlUIFqpADCLxFCQZYyLGBFWIfLImCWLmGtNN7eyiYoJMrB9WoTANNsTidWov4esOUaz+v++BCcX0R8MR/paRWZcb10ynYal4+C8UeqeY2roDoj014kOdt5HKcv652PRuMF+Ii90B7vaJ201y5D7e+DamfItABWScUk8GPy33ZvUsx9Ah9jhQ7JbsPT3/A5QAp8NlxtrpDFgoCgA8gCv+SrSzFc0QM9p3zPk56a11zLruqSjiw+UN6tWd1Gq361bXoDH94jt28Ihuz/eHvW+9tAfU4OE9+hBaxd9Va/WtTu7rVUVdbg202JB95qtNwxee9dq9ZFEF/1Up9LEUX8EJYkrKur6aa72uRzi8nOWor/xnPSnwOjPB8hfHiLuVyqoZuvla544r2bm7Nqd5WN/590jGNwsIRoKyNDfNOf0EnAL03O8f6SI9CIbuPJtAxK6kBaEVFQJPo3DzANTZJYiIjmnSsPjDIjVIMb47fyOPDTj8j+0lcylQRABhPgu0QBDzSsjWBsPCwDM6Shf/Z3tbb9ckxW6JL7tqcmKcaO6kJf5rjV+TAE6TTULOveCIo5kBkrGpbswGPk+YHJHhMDwJhfY4G+9+KIht56pVwbl8e6goijGCljvDJnXDUcCBQtX/UFKSG7Q1afBqNHox2tD/Q681RplYvCwIIfJNiaWWqyEQL4FrCu77iZFx/uSCwTAvBwuv8KWrhn9p 1tg/dZUA zN3ymfmhwPZ9IjDiVFNyMOvv4iSAa13z2sZtx3F+JuGdT6S2vyiIvlrTuHwfYhNEzebMowCzs4Dz6S079mx1Qc6HoPyzWyUGevbyDfGc0Urm0pePH23LufzGgM+ZSHAaAXxPIQKNUgJ2JSKAsnCOWRDpAzFVYoKFiWlQhsbBVH34UGofYg0d9K9THN2TymqVNla/QYZQ5UngOOfrMcse6FAuojJRWHmvZr3lYEcrFYM7OWOhbNj0B5nwRdyWxi0R3qHQ1qCOsO4TdtgxNKvXHAlbDA11f0W7Y6JJyjWl+TQBTk5mxbn83JxLmi5rMxBj4nva8sd52WvwOcaQY48QUM1dYRYFDLl/2NUotPjiKXechWtgLyuxpmrjC5/UqtwJ5ou0+LIV0cNMsZ9ERW/AkMWZ8A9sY1V6siykn4JAt40ART2J7Zlz6TX897WIoz/bayay84e6whzgj6z8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Tue, Jul 15, 2025 at 10:21=E2=80=AFAM Lorenzo Stoakes wrote: > > On Tue, Jul 15, 2025 at 06:10:16PM +0100, Lorenzo Stoakes wrote: > > > For PROCMAP_QUERY, we need priv->mm, but the newly added locked_vma > > > and locked_vma don't need to be persisted between ioctl calls. So we > > > can just add those two fields into a small struct, and for seq_file > > > case have it in priv, but for PROCMAP_QUERY just have it on the stack= . > > > The code can be written to accept this struct to maintain the state, > > > which for PROCMAP_QUERY ioctl will be very short-lived on the stack > > > one. > > > > > > Would that work? > > > > Yeah that's a great idea actually, the stack would obviously give us th= e > > per-query invocation thing. Nice! > > > > I am kicking myself because I jokingly suggested (off-list) that a help= er > > struct would be the answer to everything (I do love them) and of > > course... here we are :P > > Hm but actually we'd have to invert things I think, what I mean is - sinc= e > these fields can be updated at any time by racing threads, we can't have > _anything_ in the priv struct that is mutable. > Exactly, and I guess I was just being incomplete with just listing two of the fields that Suren make use of in PROCMAP_QUERY. See below. > So instead we should do something like: > > struct proc_maps_state { > const struct proc_maps_private *priv; > bool mmap_locked; > struct vm_area_struct *locked_vma; > struct vma_iterator iter; > loff_t last_pos; > }; > > static long procfs_procmap_ioctl(struct file *file, unsigned int cmd, uns= igned long arg) > { > struct seq_file *seq =3D file->private_data; > struct proc_maps_private *priv =3D seq->private; > struct proc_maps_state state =3D { > .priv =3D priv, > }; > > switch (cmd) { > case PROCMAP_QUERY: > return do_procmap_query(state, (void __user *)arg); I guess it's a matter of preference, but I'd actually just pass seq->priv->mm and arg into do_procmap_query(), which will make it super obvious that priv is not used or mutated, and all the new stuff that Suren needs for lockless VMA iteration, including iter (not sure PROCMAP_QUERY needs last_pos, tbh), I'd just put into this new struct, which do_procmap_query() can keep private to itself. Ultimately, I think we are on the same page, it's just a matter of structuring code and types. > default: > return -ENOIOCTLCMD; > } > } > > And then we have a stack-based thing with the bits that change and a > read-only pointer to the bits that must remain static. And we can enforce > that with const... > > We'd have to move the VMI and last_pos out too to make it const. > > Anyway the general idea should work!