Received: by 2002:a89:d88:0:b0:1fa:5c73:8e2d with SMTP id eb8csp312071lqb; Thu, 23 May 2024 21:12:39 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCVl1wAJ0nZI7dKsDXdOhMHIIbamj1lFXlCxFdiDG8OwUPF7FYy4dHOotFgOmMGBZx0lXoCGidk3m+IUe9accpLPWJEIoyxoBdt1Yajj3g== X-Google-Smtp-Source: AGHT+IG+Fvj/Q60vYCh5uHDqcUGCjv4K1YBuNLHxmpq10QisjkX5TEIZ53dRT/DZ9swwobbT6DpV X-Received: by 2002:a17:90a:fb52:b0:2b2:a1d0:b61c with SMTP id 98e67ed59e1d1-2bf5f4074famr949833a91.47.1716523959022; Thu, 23 May 2024 21:12:39 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1716523959; cv=pass; d=google.com; s=arc-20160816; b=DwgH+n5tr1WSRSH1VH8UZIZ0KHzJTJwUiktpzHbEEqTAry1gxfZ70S0lEGWFoaDjZw 4cMXQ+POtJaO6hyLWs8RKAqHO/yWYDAhMp8W2evSdkuqPmQ1OglSqhH6A9dg2yVNBdEN 9H5kTVpTaDWoN3/vru+o2ut6eMTNai++pdaQNzPMqfm3dB88CU2Ftd6O8tOFtQf6s1un ls9An66L23COlS62lD8kO+duPCAbMicZNCvD13ipN9rOc8K4BgRxcFSNdyFPwd0Cmzti 1clKNH8ZCAQgEq/nX1r5X+/wQPCMJThnrXI/qIANjHrqL79GQk8OKJCK7kR/kMpkXxkw I88w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=mLR6nTzoEqbjpMQV+qKzol6P628WFukhTh/ol7MsWXA=; fh=Y/y/ztjXR7aEronvE26r4mZ0eg4Xsop0N9w5JVKmVVc=; b=YAGFNJ5zgGTfJG02f50yedW/c+wiWZDP2cp1BgSr44sRSD90adDVH/Hz+0BEB6J6Zj yjtxeWiK25Juab62ZoRXOnlgxsOPgDpXqOa4cHxdFwNlObod1xHi6iJvWxsmFt0i3caY w63eymoDrr9AqbCTyzyf0ZSImKXAn44zlbiTz+W9B1IoG3wxJpqOJrGv/QH3AeQWPzSg aUjWDqFu+z3q8YB+PNeyaUGxR+CYWJCMMaSW5fMMO0UTcFbVQ3MV2F/Y8YAqWALf5Ld7 3UTuObuVZKdyBAXxn47HTAsWlAAiIyWvG4qABbXEDjnIqRVufzaDlWZj3R5wUKPiqN9z K3Lg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="cZqXVx/E"; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-188296-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-188296-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id 98e67ed59e1d1-2bdd9ef21absi1332921a91.63.2024.05.23.21.12.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 May 2024 21:12:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-188296-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b="cZqXVx/E"; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-188296-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-188296-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 94ECFB20A2C for ; Fri, 24 May 2024 04:11:30 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D543F3F8F7; Fri, 24 May 2024 04:10:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cZqXVx/E" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EB0773C68C; Fri, 24 May 2024 04:10:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716523845; cv=none; b=r4LkSd2r2Jy0LOWCfJ+8sFE6Wn9EuObJwPxnkvT0Su7JRRKw6TSbfZOiM+2/MHrePp3MIJlI6F+2ZBmTp2PXrCjlCOVOCn+IuM1RA9RLGreRSd//d4/eJ2xXou+vlZ+MJP9ubD8tEwWRsdr9SjYFul4tfiT+/FB1AqJHRZ0wzPY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716523845; c=relaxed/simple; bh=OsmoaOeW12SHNusJpkc/eLJf6KgrIDQoVNy4kZW2PTw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fZWvu8ZPS+Od7dyyZZN8JBNzPA2sCUMi8xpj2AdrSLGjSH+7818HENE7/ad+CzxdGIz9remaG5D5R6Tgi4lP3Xn/nyQXSKPbXNjuPUcBaPNpl7HZ3JOL73/rmAVGeUOJjbhWQBiM4CjgWfnKz790U8nBrceY2YKdkKzewnHOBcw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cZqXVx/E; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 48B6FC4AF07; Fri, 24 May 2024 04:10:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1716523844; bh=OsmoaOeW12SHNusJpkc/eLJf6KgrIDQoVNy4kZW2PTw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cZqXVx/EsEOvTjSAUVBbtfjti1Cm23EqwRhd5n08aX3GiyPd60hlMeQb6F2VNaDkd +7CNFyyRtFVM6j3zDhppC+6Hhobys7EF5AyeCcLkn/dA7JDwBcom4vcPCGVno1rICl vw+ZJDVMFOT+weDq6EIO9oyeg/0MQi+sVfw1s79/Chy6bfnCBClEN2WxyFMvqGcRvk tOi1w+JxlDoik+ErOUnaAobw2ODFn8DK9uS26dz1a7dqMM+CEND1D+iE4Ft/FGoigU a/KjLtaCFy1Eg48kHRtCB7ufetsSmKwDPUBy0FsdV2OXEindehess48Ny8elckhs1L NXl8Mvx1XISag== 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 v2 2/9] fs/procfs: extract logic for getting VMA name constituents Date: Thu, 23 May 2024 21:10:24 -0700 Message-ID: <20240524041032.1048094-3-andrii@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240524041032.1048094-1-andrii@kernel.org> References: <20240524041032.1048094-1-andrii@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 e5a5f015ff03..8e503a1635b7 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