From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752856AbbJRL77 (ORCPT ); Sun, 18 Oct 2015 07:59:59 -0400 Received: from mail-pa0-f41.google.com ([209.85.220.41]:36547 "EHLO mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752711AbbJRL7L (ORCPT ); Sun, 18 Oct 2015 07:59:11 -0400 From: Jiaxing Wang To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, Jiaxing Wang Subject: [PATCH 2/3] tracing: Make tracing work when debugfs is not compiled or initialized. Date: Sun, 18 Oct 2015 19:58:09 +0800 Message-Id: <1445169490-18315-3-git-send-email-hello.wjx@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1445169490-18315-1-git-send-email-hello.wjx@gmail.com> References: <1445169490-18315-1-git-send-email-hello.wjx@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently tracing_init_dentry() returns -ENODEV when debugfs is not initialized, which causes tracefs not populated with tracing files and directories, so we will get an empty directory even after we manually mount tracefs. We can make tracing_init_dentry() return NULL as long as tracefs is initialized and get a populated tracefs. We also need to make global_trace.dir not NULL in order to pass the checks in tracing_get_dentry() and add_tracer_options(). Signed-off-by: Jiaxing Wang --- kernel/trace/Kconfig | 1 - kernel/trace/trace.c | 29 +++++++++++++++++------------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig index 1153c43..59f6377f 100644 --- a/kernel/trace/Kconfig +++ b/kernel/trace/Kconfig @@ -95,7 +95,6 @@ config RING_BUFFER_ALLOW_SWAP config TRACING bool - select DEBUG_FS select RING_BUFFER select STACKTRACE if STACKTRACE_SUPPORT select TRACEPOINTS diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 69f9754..2d3042f 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -6706,6 +6706,8 @@ static struct vfsmount *trace_automount(void *ingore) return mnt; } +#define TRACE_TOP_DIR_ENTRY ((struct dentry *)1) + /** * tracing_init_dentry - initialize top level trace array * @@ -6716,27 +6718,30 @@ static struct vfsmount *trace_automount(void *ingore) struct dentry *tracing_init_dentry(void) { struct trace_array *tr = &global_trace; + struct dentry *traced; /* The top level trace array uses NULL as parent */ if (tr->dir) return NULL; - if (WARN_ON(!debugfs_initialized())) + if (WARN_ON(!tracefs_initialized())) return ERR_PTR(-ENODEV); - /* - * As there may still be users that expect the tracing - * files to exist in debugfs/tracing, we must automount - * the tracefs file system there, so older tools still - * work with the newer kerenl. - */ - tr->dir = debugfs_create_automount("tracing", NULL, - trace_automount, NULL); - if (!tr->dir) { - pr_warn_once("Could not create debugfs directory 'tracing'\n"); - return ERR_PTR(-ENOMEM); + if (debugfs_initialized()) { + /* + * As there may still be users that expect the tracing + * files to exist in debugfs/tracing, we must automount + * the tracefs file system there, so older tools still + * work with the newer kerenl. + */ + traced = debugfs_create_automount("tracing", NULL, + trace_automount, NULL); + if (!traced) + pr_warn_once("Could not create debugfs directory 'tracing'\n"); } + tr->dir = TRACE_TOP_DIR_ENTRY; + return NULL; } -- 2.1.4