From patchwork Tue Mar 20 10:33:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dongsheng Yang X-Patchwork-Id: 10296797 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 AFE9B602C2 for ; Tue, 20 Mar 2018 10:39:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A085529048 for ; Tue, 20 Mar 2018 10:39:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9532529585; Tue, 20 Mar 2018 10:39:45 +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 1BE1229048 for ; Tue, 20 Mar 2018 10:39:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752580AbeCTKjn (ORCPT ); Tue, 20 Mar 2018 06:39:43 -0400 Received: from m97135.mail.qiye.163.com ([220.181.97.135]:62427 "EHLO m97135.mail.qiye.163.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752670AbeCTKjm (ORCPT ); Tue, 20 Mar 2018 06:39:42 -0400 X-Greylist: delayed 364 seconds by postgrey-1.27 at vger.kernel.org; Tue, 20 Mar 2018 06:39:41 EDT Received: from atest-guest.localdomain (unknown [218.94.118.90]) by smtp1 (Coremail) with SMTP id h+CowACXdfp447BahAAuAQ--.275S2; Tue, 20 Mar 2018 18:33:29 +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] ceph: add a client_options_all in debugfs to show all options Date: Tue, 20 Mar 2018 06:33:26 -0400 Message-Id: <1521542006-16101-1-git-send-email-dongsheng.yang@easystack.cn> X-Mailer: git-send-email 1.8.3.1 X-CM-TRANSID: h+CowACXdfp447BahAAuAQ--.275S2 X-Coremail-Antispam: 1Uf129KBjvJXoWxKw43ZrWftry5tryxuw4fGrg_yoW7Gw18p3 WDCw1UAF48Ar1Sgws3Aa1kuryS9F4kAF47ZFyDCw45CFn7trn8t3Wqk34Yqr17uFW7AFsF 9F1YvFWjgr1UAw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0Jb4vtZUUUUU= X-Originating-IP: [218.94.118.90] X-CM-SenderInfo: 5grqw2pkhqwhp1dqwq5hdv52pwdfyhdfq/1tbidhkPeln5c41OAwAAsJ 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 --- include/linux/ceph/libceph.h | 3 ++- net/ceph/ceph_common.c | 10 +++++----- net/ceph/debugfs.c | 25 ++++++++++++++++++++++++- 3 files changed, 31 insertions(+), 7 deletions(-) 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);