From mboxrd@z Thu Jan 1 00:00:00 1970 From: guijianfeng@cn.fujitsu.com (Gui Jianfeng) Date: Thu, 19 Feb 2009 09:39:49 +0800 Subject: [ltt-dev] [PATCH v3] lttng: remove ltt root directory if it's no needed In-Reply-To: <499CB2F4.50805@cn.fujitsu.com> References: <20090218082858.GB6658@Krystal> <499BF60B.7090603@cn.fujitsu.com> <20090219084728.9547.A69D9226@jp.fujitsu.com> <499CB2F4.50805@cn.fujitsu.com> Message-ID: <499CB865.6080307@cn.fujitsu.com> We have to cleanup the lttng's root directory of debugfs if there is nobody uses it any more. Because any related lttng modules are unloaded, no need to keep this directory. This patch is based on 2.6.29-rc3-lttng-0.92. Signed-off-by: Gui Jianfeng --- include/linux/ltt-core.h | 1 + ltt/ltt-core.c | 10 ++++++++++ ltt/ltt-trace-control.c | 2 ++ ltt/ltt-userspace-event.c | 1 + 4 files changed, 14 insertions(+), 0 deletions(-) diff --git a/include/linux/ltt-core.h b/include/linux/ltt-core.h index bc244c6..28394cb 100644 --- a/include/linux/ltt-core.h +++ b/include/linux/ltt-core.h @@ -30,6 +30,7 @@ extern struct ltt_traces ltt_traces; /* * get dentry of ltt's root dir */ +void put_ltt_root(void); struct dentry *get_ltt_root(void); /* Keep track of trap nesting inside LTT */ diff --git a/ltt/ltt-core.c b/ltt/ltt-core.c index 18db91d..314750b 100644 --- a/ltt/ltt-core.c +++ b/ltt/ltt-core.c @@ -23,6 +23,16 @@ static DEFINE_MUTEX(ltt_traces_mutex); /* dentry of ltt's root dir */ static struct dentry *ltt_root_dentry; + +void put_ltt_root(void) +{ + if (ltt_root_dentry && list_empty(<t_root_dentry->d_subdirs)) { + debugfs_remove(ltt_root_dentry); + ltt_root_dentry = NULL; + } +} +EXPORT_SYMBOL_GPL(put_ltt_root); + struct dentry *get_ltt_root(void) { if (!ltt_root_dentry) { diff --git a/ltt/ltt-trace-control.c b/ltt/ltt-trace-control.c index 16502a2..d7c9119 100644 --- a/ltt/ltt-trace-control.c +++ b/ltt/ltt-trace-control.c @@ -740,6 +740,7 @@ err_create_destroy_trace_file: err_create_setup_trace_file: debugfs_remove(ltt_control_dir); err_create_control_dir: + put_ltt_root(); err_no_root: return err; } @@ -759,6 +760,7 @@ static void __exit ltt_trace_control_exit(void) debugfs_remove(ltt_setup_trace_file); debugfs_remove(ltt_destroy_trace_file); debugfs_remove_recursive(ltt_control_dir); + put_ltt_root(); } module_init(ltt_trace_control_init); diff --git a/ltt/ltt-userspace-event.c b/ltt/ltt-userspace-event.c index 385bd3b..a48f336 100644 --- a/ltt/ltt-userspace-event.c +++ b/ltt/ltt-userspace-event.c @@ -118,6 +118,7 @@ err_no_root: static void __exit ltt_userspace_exit(void) { debugfs_remove(ltt_event_file); + put_ltt_root(); } module_init(ltt_userspace_init); -- 1.5.4.rc3