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 7531BC25B76 for ; Tue, 11 Jun 2024 11:01:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0B96A6B00AB; Tue, 11 Jun 2024 07:01:11 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EC2DB6B00AC; Tue, 11 Jun 2024 07:01:10 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D44AF6B00AD; Tue, 11 Jun 2024 07:01:10 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B11E66B00AB for ; Tue, 11 Jun 2024 07:01:10 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 0EA6AA26BF for ; Tue, 11 Jun 2024 11:01:10 +0000 (UTC) X-FDA: 82218315900.26.5FD46B7 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf18.hostedemail.com (Postfix) with ESMTP id A6A801C0034 for ; Tue, 11 Jun 2024 11:01:07 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="QC/xfWhb"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf18.hostedemail.com: domain of andrii@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=andrii@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1718103668; 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-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DaJUfAifrLY79J8y7mFq2uYCy/DQsT1bjfecVL6JVKQ=; b=vnxTkKsn2piKydfHiBMiLdEPKTDcAm8cGqszn12Rm++PNh3EDNQO4kjL8XB4mxuvJJneSX cg4NQPl+xQlaNLonfEL9sv7yWSbbDZ0fDtgN+A3QBUNQUGDDEafjGxphwyxsjdR4Zx/JTL D6/LSAQbToG/YFGrVe7uPbzz2adSChE= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b="QC/xfWhb"; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf18.hostedemail.com: domain of andrii@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=andrii@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1718103668; a=rsa-sha256; cv=none; b=QtR077Fbsqja2jpJFO2rIPt/wRHDYfLACdEZvlXWRsyfH7bT2YXXu2SLRjULiHt6RiBMqq UBqQiSLR0YEZdiAwdy88tKk4DavwRmDGZa3XJMamgJi7lQoU3LtpxwiONHyanV1xGM8UJX KNoF3YYZou40z4Mwo1L9yyeWRzNgZFY= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id B85D1CE1B04; Tue, 11 Jun 2024 11:01:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DB58AC2BD10; Tue, 11 Jun 2024 11:01:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1718103664; bh=xq2U4bFBc0pabPUqJTbe1F2n2yJ1049NA855TclycPE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QC/xfWhbffx+WVoSOaXHIrUnxXSkewXhaNi/hgRmiGvJI3/DD7NRSwnxWZcGj2P0s fZwVBMkKJPQvIV9uvSVKFGMo/zQJr4cq+NnXcAszq9OqX5Z9eR9kW61xhStU7C8jSS Xjyv6ECW6oPbALlEKfFzg6ExTj8YLyFAn55kvzxGtAVGVBC4ZCXBxgLaddEPKKi1wv SeBXJMNvZSWeuP78EFBAvdpOSnSE1aCiEJ2S7Km4dZNGj08/4JrN1qgX1m+t4EJE59 h9FN2MySUaisAa4ve/QoWoCW0O0Vfke5qBKLSSJuGq8mb6m2fs4PvRAK/0Q03B/y5l XSVSYe62Ibt1g== From: Andrii Nakryiko To: linux-fsdevel@vger.kernel.org, brauner@kernel.org, viro@zeniv.linux.org.uk, akpm@linux-foundation.org Cc: linux-kernel@vger.kernel.org, bpf@vger.kernel.org, gregkh@linuxfoundation.org, linux-mm@kvack.org, liam.howlett@oracle.com, surenb@google.com, rppt@kernel.org, Andrii Nakryiko Subject: [PATCH v4 1/7] fs/procfs: extract logic for getting VMA name constituents Date: Tue, 11 Jun 2024 04:00:49 -0700 Message-ID: <20240611110058.3444968-2-andrii@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240611110058.3444968-1-andrii@kernel.org> References: <20240611110058.3444968-1-andrii@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: A6A801C0034 X-Rspamd-Server: rspam10 X-Rspam-User: X-Stat-Signature: u1kf7k1e9xz3jcbq3x58edfnwa8w6sns X-HE-Tag: 1718103667-45916 X-HE-Meta: U2FsdGVkX1+MSjK3gXOdf6e64O4sTrm9bEyd2GAarA+zdxABoSMhXfBl+p4Na5Wm8UmaFLaf8LKDSnZFeNZLU9acfLHQdg7NLeILqVxPlVPzbMvr+lP0Cb4GFL+1r34CrN/Hwz0htd0wgTnvT0lSoEyFnvRm26Sehm2cvmvH52Uw2khCQMxmHCeS6LIXhah76xjqVWVTGxPfY27jGGmV1DMlryTDZfFrjP7u93vuUN4AksfKQxhjZn5i930YMthK8oYXNyNWEz37/bUA429itO7+g/T0uqKX6CMkTpFQLbnUDfufNewD1Keza7vPmQ651K++TCHGJ+wn/0cdBPUM0f1dyswcNfI/7TVKGIFjkfWdGI/VWp5cmCPz+yoTzlqtOgkf3Si0up0sHGp3+KcY4XmKerEf2LyqgfmJv3QZTtBNnItVQnu/7hDD7YTvDZDjfgExp/L+QlNNbXNPfOQPkXwXRD/3cWn8Ly6PxJGn4LBW4g7DU2lu3wRXd5LAR3Epp8UW3eGoS/ozyJgtIM5WzqXKGrF3ccXE8Ldn31sXXIoq9C6xv1PXYii0zpvbG+We+ClAQblC/4EEoM8ZohreXfhHs1kUMtnkRe3VVNlAVQ5I6202IKDH1uomgRQUaeWOIKD849qm3t7aUaGQPtwkrIZGfBYNNniDAiMyjDFApej9kprDBlVRnqAfvSQEZLgOvebXRbhcYmWD1zvxe5nVWH6MJL06kzl4hxyYT7ziE7l6utSylnsuyhpKBfunJqPs3sOxhBepWJCUdyiCOz6BXpGyWWyUmdOqmL5g2woOStjHbM7Bcm3+KX/Z5D7AIMN8oDHMZ8gCdpDGwINdB1IaU4Kl7eU5sJUh74JyM3PS+78Hzdc0r8Fn+oZT6kmimDQYuRqXvDUuinY3hJrHRxv3MS/ZiGSVX22V6Xbr6etsofwCUlBnoGIVlCwbFKnN3okoFS9qUgjgzQvUUdoXais hbvgjDHp nhEDWK75ukxqZUBBBhwUS42rp+f1RtbSaYA34W7Hq09ctvrMJiKNJwU12c36ofclFOr65ConPQAzz4b2RH4E9Gk6SzD1Y6CGK+vng4Xsd/qmqQC522XcsMnmjpk+D7P99rI0tu32xtyD0xTWzfhXGBR8gBjTB+jpQQJ58p2CNsf7h2Gw9rdcd3/7+JWFB73ohq6zLFCPIVhd7W8gCKolGwc6J/O2cxVnGDNEQr2CRZz9XIU/DHlrSAOM4kd/vDv19NLqqpiTwn5VRbJ8tZ3hZUY5V5Awpsa/1XVEN1zHH7xg+53IOMqVHrOqm4MH8ktSIxH0X 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: Extract generic logic to fetch relevant pieces of data to describe VMA name. This could be just some string (either special constant or user-provided), or a string with some formatted wrapping text (e.g., "[anon_shmem:]"), or, commonly, file path. seq_file-based logic has different methods to handle all three cases, but they are currently mixed in with extracting underlying sources of data. This patch splits this into data fetching and data formatting, so that data fetching can be reused later on. There should be no functional changes. Signed-off-by: Andrii Nakryiko --- fs/proc/task_mmu.c | 125 +++++++++++++++++++++++++-------------------- 1 file changed, 71 insertions(+), 54 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 5aceb3db7565..2cc6220222e2 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -239,6 +239,67 @@ static int do_maps_open(struct inode *inode, struct file *file, sizeof(struct proc_maps_private)); } +static void get_vma_name(struct vm_area_struct *vma, + const struct path **path, + const char **name, + const char **name_fmt) +{ + struct anon_vma_name *anon_name = vma->vm_mm ? anon_vma_name(vma) : NULL; + + *name = NULL; + *path = NULL; + *name_fmt = NULL; + + /* + * Print the dentry name for named mappings, and a + * special [heap] marker for the heap: + */ + if (vma->vm_file) { + /* + * If user named this anon shared memory via + * prctl(PR_SET_VMA ..., use the provided name. + */ + if (anon_name) { + *name_fmt = "[anon_shmem:%s]"; + *name = anon_name->name; + } else { + *path = file_user_path(vma->vm_file); + } + return; + } + + if (vma->vm_ops && vma->vm_ops->name) { + *name = vma->vm_ops->name(vma); + if (*name) + return; + } + + *name = arch_vma_name(vma); + if (*name) + return; + + if (!vma->vm_mm) { + *name = "[vdso]"; + return; + } + + if (vma_is_initial_heap(vma)) { + *name = "[heap]"; + return; + } + + if (vma_is_initial_stack(vma)) { + *name = "[stack]"; + return; + } + + if (anon_name) { + *name_fmt = "[anon:%s]"; + *name = anon_name->name; + return; + } +} + static void show_vma_header_prefix(struct seq_file *m, unsigned long start, unsigned long end, vm_flags_t flags, unsigned long long pgoff, @@ -262,17 +323,15 @@ static void show_vma_header_prefix(struct seq_file *m, static void show_map_vma(struct seq_file *m, struct vm_area_struct *vma) { - struct anon_vma_name *anon_name = NULL; - struct mm_struct *mm = vma->vm_mm; - struct file *file = vma->vm_file; + const struct path *path; + const char *name_fmt, *name; vm_flags_t flags = vma->vm_flags; unsigned long ino = 0; unsigned long long pgoff = 0; unsigned long start, end; dev_t dev = 0; - const char *name = NULL; - if (file) { + if (vma->vm_file) { const struct inode *inode = file_user_inode(vma->vm_file); dev = inode->i_sb->s_dev; @@ -283,57 +342,15 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma) start = vma->vm_start; end = vma->vm_end; show_vma_header_prefix(m, start, end, flags, pgoff, dev, ino); - if (mm) - anon_name = anon_vma_name(vma); - /* - * Print the dentry name for named mappings, and a - * special [heap] marker for the heap: - */ - if (file) { + get_vma_name(vma, &path, &name, &name_fmt); + if (path) { seq_pad(m, ' '); - /* - * If user named this anon shared memory via - * prctl(PR_SET_VMA ..., use the provided name. - */ - if (anon_name) - seq_printf(m, "[anon_shmem:%s]", anon_name->name); - else - seq_path(m, file_user_path(file), "\n"); - goto done; - } - - if (vma->vm_ops && vma->vm_ops->name) { - name = vma->vm_ops->name(vma); - if (name) - goto done; - } - - name = arch_vma_name(vma); - if (!name) { - if (!mm) { - name = "[vdso]"; - goto done; - } - - if (vma_is_initial_heap(vma)) { - name = "[heap]"; - goto done; - } - - if (vma_is_initial_stack(vma)) { - name = "[stack]"; - goto done; - } - - if (anon_name) { - seq_pad(m, ' '); - seq_printf(m, "[anon:%s]", anon_name->name); - } - } - -done: - if (name) { + seq_path(m, path, "\n"); + } else if (name_fmt) { + seq_pad(m, ' '); + seq_printf(m, name_fmt, name); + } else if (name) { seq_pad(m, ' '); seq_puts(m, name); } -- 2.43.0