From patchwork Tue Mar 20 11:57:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dongsheng Yang X-Patchwork-Id: 10296943 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 49F7960385 for ; Tue, 20 Mar 2018 11:58:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 36CC5288C3 for ; Tue, 20 Mar 2018 11:58:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2B302288E7; Tue, 20 Mar 2018 11:58:05 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EDCDD2893C for ; Tue, 20 Mar 2018 11:58:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752759AbeCTL6B (ORCPT ); Tue, 20 Mar 2018 07:58:01 -0400 Received: from m97134.mail.qiye.163.com ([220.181.97.134]:12381 "EHLO m97134.mail.qiye.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751084AbeCTL6B (ORCPT ); Tue, 20 Mar 2018 07:58:01 -0400 Received: from atest-guest.localdomain (unknown [218.94.118.90]) by smtp5 (Coremail) with SMTP id huCowADXSWYu97Ba6ikrAQ--.1707S2; Tue, 20 Mar 2018 19:57:34 +0800 (CST) From: Dongsheng Yang To: idryomov@gmail.com, sage@redhat.com, elder@kernel.org, jdillama@redhat.com Cc: ceph-devel@vger.kernel.org, Dongsheng Yang Subject: [PATCH v2] ceph: add a client_options_all in debugfs to show all options Date: Tue, 20 Mar 2018 07:57:31 -0400 Message-Id: <1521547051-10195-1-git-send-email-dongsheng.yang@easystack.cn> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1521542006-16101-1-git-send-email-dongsheng.yang@easystack.cn> References: <1521542006-16101-1-git-send-email-dongsheng.yang@easystack.cn> X-CM-TRANSID: huCowADXSWYu97Ba6ikrAQ--.1707S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxKw43ZF1rurWrKr13GF1UGFg_yoW7Zr18p3 WDCw1UAF4kAr1Sgws7Ja1kuryS9F4kAF47ZFyDCw45CFnaqrn8t3Wvk34Ygr17uFW7AFsF 9Fn09FWjgr1UAwUanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0J1jwIgUUUUU= X-Originating-IP: [218.94.118.90] X-CM-SenderInfo: 5grqw2pkhqwhp1dqwq5hdv52pwdfyhdfq/1tbiAQ4PelikS9ibkQAAsf Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP As the /sys/kernel/debug/ceph/XXX/client_options only print options which is different with default values, user are not able to know the default values of them. So we need to show the all options for user, but we can't change the client_options file for backward compatibility, then this patch add a new file in debugfs client_options_all to show the all options for user. Signed-off-by: Dongsheng Yang --- Chnages since v1: - update the ceph_print_client_options() in fs/ceph/super.c fs/ceph/super.c | 2 +- include/linux/ceph/libceph.h | 3 ++- net/ceph/ceph_common.c | 10 +++++----- net/ceph/debugfs.c | 25 ++++++++++++++++++++++++- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/fs/ceph/super.c b/fs/ceph/super.c index fb2bc9c..d752d58 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -496,7 +496,7 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root) seq_putc(m, ','); pos = m->count; - ret = ceph_print_client_options(m, fsc->client); + ret = ceph_print_client_options(m, fsc->client, false); if (ret) return ret; diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h index c2ec44c..678befa 100644 --- a/include/linux/ceph/libceph.h +++ b/include/linux/ceph/libceph.h @@ -133,6 +133,7 @@ struct ceph_client { struct dentry *debugfs_monmap; struct dentry *debugfs_osdmap; struct dentry *debugfs_options; + struct dentry *debugfs_options_all; #endif }; @@ -274,7 +275,7 @@ extern struct ceph_options *ceph_parse_options(char *options, const char *dev_name, const char *dev_name_end, int (*parse_extra_token)(char *c, void *private), void *private); -int ceph_print_client_options(struct seq_file *m, struct ceph_client *client); +int ceph_print_client_options(struct seq_file *m, struct ceph_client *client, bool skip_default); extern void ceph_destroy_options(struct ceph_options *opt); extern int ceph_compare_options(struct ceph_options *new_opt, struct ceph_client *client); diff --git a/net/ceph/ceph_common.c b/net/ceph/ceph_common.c index 4d4c822..7f3f6d4 100644 --- a/net/ceph/ceph_common.c +++ b/net/ceph/ceph_common.c @@ -544,7 +544,7 @@ struct ceph_options * } EXPORT_SYMBOL(ceph_parse_options); -int ceph_print_client_options(struct seq_file *m, struct ceph_client *client) +int ceph_print_client_options(struct seq_file *m, struct ceph_client *client, bool skip_default) { struct ceph_options *opt = client->options; size_t pos = m->count; @@ -570,16 +570,16 @@ int ceph_print_client_options(struct seq_file *m, struct ceph_client *client) if ((opt->flags & CEPH_OPT_TCP_NODELAY) == 0) seq_puts(m, "notcp_nodelay,"); - if (opt->mount_timeout != CEPH_MOUNT_TIMEOUT_DEFAULT) + if (opt->mount_timeout != CEPH_MOUNT_TIMEOUT_DEFAULT || !skip_default) seq_printf(m, "mount_timeout=%d,", jiffies_to_msecs(opt->mount_timeout) / 1000); - if (opt->osd_idle_ttl != CEPH_OSD_IDLE_TTL_DEFAULT) + if (opt->osd_idle_ttl != CEPH_OSD_IDLE_TTL_DEFAULT || !skip_default) seq_printf(m, "osd_idle_ttl=%d,", jiffies_to_msecs(opt->osd_idle_ttl) / 1000); - if (opt->osd_keepalive_timeout != CEPH_OSD_KEEPALIVE_DEFAULT) + if (opt->osd_keepalive_timeout != CEPH_OSD_KEEPALIVE_DEFAULT || !skip_default) seq_printf(m, "osdkeepalivetimeout=%d,", jiffies_to_msecs(opt->osd_keepalive_timeout) / 1000); - if (opt->osd_request_timeout != CEPH_OSD_REQUEST_TIMEOUT_DEFAULT) + if (opt->osd_request_timeout != CEPH_OSD_REQUEST_TIMEOUT_DEFAULT || !skip_default) seq_printf(m, "osd_request_timeout=%d,", jiffies_to_msecs(opt->osd_request_timeout) / 1000); diff --git a/net/ceph/debugfs.c b/net/ceph/debugfs.c index 1eef680..09537f9 100644 --- a/net/ceph/debugfs.c +++ b/net/ceph/debugfs.c @@ -375,7 +375,20 @@ static int client_options_show(struct seq_file *s, void *p) struct ceph_client *client = s->private; int ret; - ret = ceph_print_client_options(s, client); + ret = ceph_print_client_options(s, client, true); + if (ret) + return ret; + + seq_putc(s, '\n'); + return 0; +} + +static int client_options_all_show(struct seq_file *s, void *p) +{ + struct ceph_client *client = s->private; + int ret; + + ret = ceph_print_client_options(s, client, false); if (ret) return ret; @@ -388,6 +401,7 @@ static int client_options_show(struct seq_file *s, void *p) CEPH_DEFINE_SHOW_FUNC(monc_show) CEPH_DEFINE_SHOW_FUNC(osdc_show) CEPH_DEFINE_SHOW_FUNC(client_options_show) +CEPH_DEFINE_SHOW_FUNC(client_options_all_show) int ceph_debugfs_init(void) { @@ -457,6 +471,14 @@ int ceph_debugfs_client_init(struct ceph_client *client) if (!client->debugfs_options) goto out; + client->debugfs_options_all = debugfs_create_file("client_options_all", + 0600, + client->debugfs_dir, + client, + &client_options_all_show_fops); + if (!client->debugfs_options_all) + goto out; + return 0; out: @@ -467,6 +489,7 @@ int ceph_debugfs_client_init(struct ceph_client *client) void ceph_debugfs_client_cleanup(struct ceph_client *client) { dout("ceph_debugfs_client_cleanup %p\n", client); + debugfs_remove(client->debugfs_options_all); debugfs_remove(client->debugfs_options); debugfs_remove(client->debugfs_osdmap); debugfs_remove(client->debugfs_monmap);