From mboxrd@z Thu Jan 1 00:00:00 1970 From: guijianfeng@cn.fujitsu.com (Gui Jianfeng) Date: Wed, 18 Feb 2009 19:50:35 +0800 Subject: [ltt-dev] [PATCH v2] lttng: remove ltt root directory if it's no needed In-Reply-To: <20090218082858.GB6658@Krystal> References: <499BC3E1.8030908@cn.fujitsu.com> <20090218082858.GB6658@Krystal> Message-ID: <499BF60B.7090603@cn.fujitsu.com> We have to cleanup the lttng's root directory of debugfs if there is nobody uses it any more. 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 | 4 +++- ltt/ltt-userspace-event.c | 1 + 4 files changed, 15 insertions(+), 1 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..0cdeb8a 100644 --- a/ltt/ltt-trace-control.c +++ b/ltt/ltt-trace-control.c @@ -740,7 +740,8 @@ err_create_destroy_trace_file: err_create_setup_trace_file: debugfs_remove(ltt_control_dir); err_create_control_dir: -err_no_root: + 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