Received: by 10.192.165.148 with SMTP id m20csp4105319imm; Mon, 23 Apr 2018 19:22:59 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+CA/ZkmAotBl+J0NlB5Iu8x3nkwoNcrC67DNHHeNQEUOIzZistg5gR0zpLekyVe7C7f4Pv X-Received: by 2002:a17:902:96a:: with SMTP id 97-v6mr23528062plm.266.1524536579665; Mon, 23 Apr 2018 19:22:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524536579; cv=none; d=google.com; s=arc-20160816; b=LmL6muvguItD0ofNnEQmAdqLILOfO6nPpizvjkT3QegouzeTKQ78GWRdCJeuxVzqN4 rr0K6nWXcXKzBWduQxOYfznRRN69gWOM24ESJ5R16jzW9feFPivTkQ9wChzVox6B2MTF NaDn2rM61ML9NOfZcTTdfCCL9gYA/aZm/MDlbqDCzc7E568Wo/+nlFzdMMEN+X4ppyme 8lKPM3R7lZ6nzis66WLG7q6kKIwUlFZxZMPfeDHmAenAEAR4mC4K64zV0tA25K6Ho4kR 44Rbxh/w4PGShJG38NN5ZsvY6WDoF0GJsRYfNR+4xk7R9sKqILRRquG/eEcESHK7lHux 12gA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=6FXVlhKB8Os44IT6XtuNqURIcLuHNvchAauWW3QpzDU=; b=ukydlNRLxwoCLdDqtMmHIKzbKkVCvvw8gasS5nDVkh4LwX8s+5tMYQzvc1QVEA6ePh kaywIi3HqX5TWYywia3vgKI1QqxmeC7ZNp9PVbPd7SmxMSPQ80vlt2DDnxkVvH6PcmXc MqCwdGW3vh1I0CK6OEW1st89dBQyuxExBJCJigFDNngh+QldVpgy34qcU8sTsvqz8JyJ zKF/4QaMG8bJlHJeU17DKpGDZjmqO2KW5HRIHM9vhoffT3YeZ0xVA8PEoT8jKFejRuAL 5bSwIWI8wbqKriojDSU8WfcReMQTOe39txdX9RrysxBiHTt7RV7PSkga/RWb9bLUt9lm IjnQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b2si11044901pgf.13.2018.04.23.19.22.45; Mon, 23 Apr 2018 19:22:59 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932779AbeDXCVV (ORCPT + 99 others); Mon, 23 Apr 2018 22:21:21 -0400 Received: from mx2.suse.de ([195.135.220.15]:36650 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932688AbeDXCVP (ORCPT ); Mon, 23 Apr 2018 22:21:15 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 85E96AE78; Tue, 24 Apr 2018 02:21:12 +0000 (UTC) Received: from starscream.home.jeffm.io (starscream-1.home.jeffm.io [IPv6:2001:559:c0d4::1fe]) by mail.home.jeffm.io (Postfix) with ESMTPS id 1BCEF81AD3E1; Mon, 23 Apr 2018 22:20:54 -0400 (EDT) Received: by starscream.home.jeffm.io (Postfix, from userid 1000) id D12A1803E3; Mon, 23 Apr 2018 22:21:10 -0400 (EDT) From: jeffm@suse.com To: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Cc: Al Viro , "Eric W . Biederman" , Alexey Dobriyan , Oleg Nesterov , Jeff Mahoney Subject: [PATCH 1/5] procfs: factor out a few helpers Date: Mon, 23 Apr 2018 22:21:02 -0400 Message-Id: <20180424022106.16952-2-jeffm@suse.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20180424022106.16952-1-jeffm@suse.com> References: <20180424022106.16952-1-jeffm@suse.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jeff Mahoney In order to make the following series easier to review, this patch factors out a few helpers: - proc_fill_cache_entry: proc_fill_cache that takes an entry instead of an entry, a name, and a name length - pident_lookup_task: proc_pident_lookup that takes a task, allowing the caller to do the task validation - pid_entry_match_dentry: the comparison between a dentry's name and a pid_entry Signed-off-by: Jeff Mahoney --- fs/proc/base.c | 60 ++++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 20 deletions(-) diff --git a/fs/proc/base.c b/fs/proc/base.c index 9298324325ed..e9876a89a5ad 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -2453,19 +2453,28 @@ static int proc_pident_instantiate(struct inode *dir, return -ENOENT; } -static struct dentry *proc_pident_lookup(struct inode *dir, - struct dentry *dentry, - const struct pid_entry *ents, - unsigned int nents) +static bool proc_fill_cache_entry(struct file *file, struct dir_context *ctx, + const struct pid_entry *entry, + struct task_struct *task) { - int error; - struct task_struct *task = get_proc_task(dir); - const struct pid_entry *p, *last; + return proc_fill_cache(file, ctx, entry->name, entry->len, + proc_pident_instantiate, task, entry); +} - error = -ENOENT; +static bool pid_entry_match_dentry(const struct pid_entry *entry, + const struct dentry *dentry) +{ + if (entry->len != dentry->d_name.len) + return false; + return !memcmp(dentry->d_name.name, entry->name, entry->len); +} - if (!task) - goto out_no_task; +static int proc_pident_lookup_task(struct inode *dir, struct dentry *dentry, + const struct pid_entry *ents, + unsigned int nents, + struct task_struct *task) +{ + const struct pid_entry *p, *last; /* * Yes, it does not scale. And it should not. Don't add @@ -2473,18 +2482,30 @@ static struct dentry *proc_pident_lookup(struct inode *dir, */ last = &ents[nents]; for (p = ents; p < last; p++) { - if (p->len != dentry->d_name.len) - continue; - if (!memcmp(dentry->d_name.name, p->name, p->len)) + if (pid_entry_match_dentry(p, dentry)) break; } if (p >= last) - goto out; + return -ENOENT; + + return proc_pident_instantiate(dir, dentry, task, p); +} + +static struct dentry *proc_pident_lookup(struct inode *dir, + struct dentry *dentry, + const struct pid_entry *ents, + unsigned int nents) +{ + struct task_struct *task; + int error = -ENOENT; + + task = get_proc_task(dir); + if (task) { + error = proc_pident_lookup_task(dir, dentry, ents, + nents, task); + put_task_struct(task); + } - error = proc_pident_instantiate(dir, dentry, task, p); -out: - put_task_struct(task); -out_no_task: return ERR_PTR(error); } @@ -2504,8 +2525,7 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx, goto out; for (p = ents + (ctx->pos - 2); p < ents + nents; p++) { - if (!proc_fill_cache(file, ctx, p->name, p->len, - proc_pident_instantiate, task, p)) + if (!proc_fill_cache_entry(file, ctx, p, task)) break; ctx->pos++; } -- 2.12.3