Received: by 10.192.165.148 with SMTP id m20csp4497917imm; Mon, 30 Apr 2018 20:54:34 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpTeM6zn8ATySNKCThORVuhDY03vceZG1MD3fGJbONAYM9AgW4/js5TfqX0ycanZLxBdZPz X-Received: by 10.98.204.220 with SMTP id j89mr14466084pfk.182.1525146874870; Mon, 30 Apr 2018 20:54:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525146874; cv=none; d=google.com; s=arc-20160816; b=OHeop8NFl5ny7xtCzQCoF7+mXSAw+6nKbfTmyIVIGl6FagW5tZD/MRQA6//L54IZQb aUoJzV2o1Bkd4lvDBKX3FKQvHZ887yuJJHvEh25gAZhrdYH9YgzDPd2vFIj2gGSSZ8gf 0Q5ZkHYBkfhMOyzYn3SuWFzVf3mSjsEHgRIuTvuN0Pk7dzYk4QY7mpBeapwXQ15dn0jO J4SlkOZDZyA9B50Ih68qMHSX2Q7i+oD6ejK/qQw4NFHf6YT9NxyKczjqCZx7Pk+An2z5 33YozEUP+h69tufTfoyQvD8WoGVtcMOLj9k404Ml+LOMHohZ96cMA8Lgecz96RLo6oIY 4kOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:cc:subject:date:to :from:arc-authentication-results; bh=GKcHrTMCvSBH0D0+F0WdD7Nvk5Y0eRhUA0+B6v0EzuY=; b=shVaGLX6s2YUJhQ+CneeTLRZUEJ7Sm0/AMtwXon+54eWXWHFMdkNTU564iPWAQ9f94 EV8ZTDfv902SfoC3v9+2PIbPAzrelUnHHs/jFSDan3jAFyjEYthsJhAq29L+a1dOG3Dl J5YoEn9GWaVj7bBK3Q064G8oIurkMHLX27bNhiCPWbxKmNMuPek0MPFMPcd/CK8FMhtM /vqfC/aCpcIFmg2ndJ3A/4zmv8t5wO6AY5nLU6PF/cz2mWd+kusRnDhBJuZweQYsqOr7 4Im4jGlm7oi0s3iPTbdNdoG2SYVHnEyN/Pm+Wbwel2lFRRcFbMJObqHXtkATY128WUYW Qdrg== 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 p186si9273810pfb.171.2018.04.30.20.54.20; Mon, 30 Apr 2018 20:54:34 -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 S1755277AbeEADxt (ORCPT + 99 others); Mon, 30 Apr 2018 23:53:49 -0400 Received: from mx2.suse.de ([195.135.220.15]:59245 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755151AbeEADxr (ORCPT ); Mon, 30 Apr 2018 23:53:47 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 909B1ABB8; Tue, 1 May 2018 03:53:46 +0000 (UTC) From: NeilBrown To: Oleg Drokin , Greg Kroah-Hartman , James Simmons , Andreas Dilger Date: Tue, 01 May 2018 13:52:39 +1000 Subject: [PATCH 06/10] staging: lustre: llite: use more private data in dump_pgcache Cc: Linux Kernel Mailing List , Lustre Development List Message-ID: <152514675904.17843.14765347572362739654.stgit@noble> In-Reply-To: <152514658325.17843.11455067361317157487.stgit@noble> References: <152514658325.17843.11455067361317157487.stgit@noble> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The dump_page_cache debugfs file allocates and frees an 'env' in each call to vvp_pgcache_start,next,show. This is likely to be fast, but does introduce the need to check for errors. It is reasonable to allocate a single 'env' when the file is opened, and use that throughout. So create 'seq_private' structure which stores the sbi, env, and refcheck, and attach this to the seqfile. Then use it throughout instead of allocating 'env' repeatedly. Signed-off-by: NeilBrown --- drivers/staging/lustre/lustre/llite/vvp_dev.c | 150 ++++++++++++------------- 1 file changed, 72 insertions(+), 78 deletions(-) diff --git a/drivers/staging/lustre/lustre/llite/vvp_dev.c b/drivers/staging/lustre/lustre/llite/vvp_dev.c index 987c03b058e6..a2619dc04a7f 100644 --- a/drivers/staging/lustre/lustre/llite/vvp_dev.c +++ b/drivers/staging/lustre/lustre/llite/vvp_dev.c @@ -390,6 +390,12 @@ struct vvp_pgcache_id { struct lu_object_header *vpi_obj; }; +struct seq_private { + struct ll_sb_info *sbi; + struct lu_env *env; + u16 refcheck; +}; + static void vvp_pgcache_id_unpack(loff_t pos, struct vvp_pgcache_id *id) { BUILD_BUG_ON(sizeof(pos) != sizeof(__u64)); @@ -531,95 +537,71 @@ static void vvp_pgcache_page_show(const struct lu_env *env, static int vvp_pgcache_show(struct seq_file *f, void *v) { + struct seq_private *priv = f->private; loff_t pos; - struct ll_sb_info *sbi; struct cl_object *clob; - struct lu_env *env; struct vvp_pgcache_id id; - u16 refcheck; - int result; - env = cl_env_get(&refcheck); - if (!IS_ERR(env)) { - pos = *(loff_t *)v; - vvp_pgcache_id_unpack(pos, &id); - sbi = f->private; - clob = vvp_pgcache_obj(env, &sbi->ll_cl->cd_lu_dev, &id); - if (clob) { - struct inode *inode = vvp_object_inode(clob); - struct cl_page *page = NULL; - struct page *vmpage; - - result = find_get_pages_contig(inode->i_mapping, - id.vpi_index, 1, - &vmpage); - if (result > 0) { - lock_page(vmpage); - page = cl_vmpage_page(vmpage, clob); - unlock_page(vmpage); - put_page(vmpage); - } + pos = *(loff_t *)v; + vvp_pgcache_id_unpack(pos, &id); + clob = vvp_pgcache_obj(priv->env, &priv->sbi->ll_cl->cd_lu_dev, &id); + if (clob) { + struct inode *inode = vvp_object_inode(clob); + struct cl_page *page = NULL; + struct page *vmpage; + int result; + + result = find_get_pages_contig(inode->i_mapping, + id.vpi_index, 1, + &vmpage); + if (result > 0) { + lock_page(vmpage); + page = cl_vmpage_page(vmpage, clob); + unlock_page(vmpage); + put_page(vmpage); + } - seq_printf(f, "%8x@" DFID ": ", id.vpi_index, - PFID(lu_object_fid(&clob->co_lu))); - if (page) { - vvp_pgcache_page_show(env, f, page); - cl_page_put(env, page); - } else { - seq_puts(f, "missing\n"); - } - lu_object_ref_del(&clob->co_lu, "dump", current); - cl_object_put(env, clob); + seq_printf(f, "%8x@" DFID ": ", id.vpi_index, + PFID(lu_object_fid(&clob->co_lu))); + if (page) { + vvp_pgcache_page_show(priv->env, f, page); + cl_page_put(priv->env, page); } else { - seq_printf(f, "%llx missing\n", pos); + seq_puts(f, "missing\n"); } - cl_env_put(env, &refcheck); - result = 0; + lu_object_ref_del(&clob->co_lu, "dump", current); + cl_object_put(priv->env, clob); } else { - result = PTR_ERR(env); + seq_printf(f, "%llx missing\n", pos); } - return result; + return 0; } static void *vvp_pgcache_start(struct seq_file *f, loff_t *pos) { - struct ll_sb_info *sbi; - struct lu_env *env; - u16 refcheck; - - sbi = f->private; + struct seq_private *priv = f->private; - env = cl_env_get(&refcheck); - if (!IS_ERR(env)) { - sbi = f->private; - if (sbi->ll_site->ls_obj_hash->hs_cur_bits > - 64 - PGC_OBJ_SHIFT) { - pos = ERR_PTR(-EFBIG); - } else { - *pos = vvp_pgcache_find(env, &sbi->ll_cl->cd_lu_dev, - *pos); - if (*pos == ~0ULL) - pos = NULL; - } - cl_env_put(env, &refcheck); + if (priv->sbi->ll_site->ls_obj_hash->hs_cur_bits > + 64 - PGC_OBJ_SHIFT) { + pos = ERR_PTR(-EFBIG); + } else { + *pos = vvp_pgcache_find(priv->env, &priv->sbi->ll_cl->cd_lu_dev, + *pos); + if (*pos == ~0ULL) + pos = NULL; } + return pos; } static void *vvp_pgcache_next(struct seq_file *f, void *v, loff_t *pos) { - struct ll_sb_info *sbi; - struct lu_env *env; - u16 refcheck; + struct seq_private *priv = f->private; + + *pos = vvp_pgcache_find(priv->env, &priv->sbi->ll_cl->cd_lu_dev, *pos + 1); + if (*pos == ~0ULL) + pos = NULL; - env = cl_env_get(&refcheck); - if (!IS_ERR(env)) { - sbi = f->private; - *pos = vvp_pgcache_find(env, &sbi->ll_cl->cd_lu_dev, *pos + 1); - if (*pos == ~0ULL) - pos = NULL; - cl_env_put(env, &refcheck); - } return pos; } @@ -637,17 +619,29 @@ static const struct seq_operations vvp_pgcache_ops = { static int vvp_dump_pgcache_seq_open(struct inode *inode, struct file *filp) { - struct seq_file *seq; - int rc; - - rc = seq_open(filp, &vvp_pgcache_ops); - if (rc) - return rc; + struct seq_private *priv; + + priv = __seq_open_private(filp, &vvp_pgcache_ops, sizeof(*priv)); + if (!priv) + return -ENOMEM; + + priv->sbi = inode->i_private; + priv->env = cl_env_get(&priv->refcheck); + if (IS_ERR(priv->env)) { + int err = PTR_ERR(priv->env); + seq_release_private(inode, filp); + return err; + } + return 0; +} - seq = filp->private_data; - seq->private = inode->i_private; +static int vvp_dump_pgcache_seq_release(struct inode *inode, struct file *file) +{ + struct seq_file *seq = file->private_data; + struct seq_private *priv = seq->private; - return 0; + cl_env_put(priv->env, &priv->refcheck); + return seq_release_private(inode, file); } const struct file_operations vvp_dump_pgcache_file_ops = { @@ -655,5 +649,5 @@ const struct file_operations vvp_dump_pgcache_file_ops = { .open = vvp_dump_pgcache_seq_open, .read = seq_read, .llseek = seq_lseek, - .release = seq_release, + .release = vvp_dump_pgcache_seq_release, };