summaryrefslogtreecommitdiffstats
path: root/runtime/transport/procfs.c
diff options
context:
space:
mode:
authorfche <fche>2007-03-12 18:28:47 +0000
committerfche <fche>2007-03-12 18:28:47 +0000
commitb272f21d2a42d44222cfc20f35025c324f6091c4 (patch)
treed3435c5a9d1576233b4f9a42e785db1908bc6118 /runtime/transport/procfs.c
parentcb43d90b37a7f9a066d56881b87067ef3254d95d (diff)
downloadsystemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.tar.gz
systemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.tar.xz
systemtap-steved-b272f21d2a42d44222cfc20f35025c324f6091c4.zip
2007-03-12 Frank Ch. Eigler <fche@elastic.org>
* librelay.c (init_stp): Use /proc/MODULE rather than /proc/systemtap/MODULE. 2007-03-12 Frank Ch. Eigler <fche@elastic.org> * procfs.c (_stp_register_procfs): Use /proc/MODULE rather than /proc/systemtap/MODULE.
Diffstat (limited to 'runtime/transport/procfs.c')
-rw-r--r--runtime/transport/procfs.c26
1 files changed, 8 insertions, 18 deletions
diff --git a/runtime/transport/procfs.c b/runtime/transport/procfs.c
index ca243035..64538ae6 100644
--- a/runtime/transport/procfs.c
+++ b/runtime/transport/procfs.c
@@ -302,7 +302,6 @@ err:
static int _stp_register_procfs (void)
{
int i;
- const char *dirname = "systemtap";
#ifdef STP_RELAYFS
int j;
char buf[8];
@@ -322,22 +321,13 @@ static int _stp_register_procfs (void)
_stp_allocated_net_memory += sizeof(struct _stp_buffer);
list_add (p, &_stp_pool_q);
}
-
- /* look for existing /proc/systemtap */
- for (de = proc_root.subdir; de; de = de->next) {
- if (my_proc_match (strlen (dirname), dirname, de)) {
- _stp_proc_root = de;
- break;
- }
- }
-
- /* create /proc/systemtap if it doesn't exist */
- if (_stp_proc_root == NULL) {
- _stp_proc_root = proc_mkdir (dirname, NULL);
- if (_stp_proc_root == NULL)
- goto err0;
- }
+ /* Formerly, we allocated /proc/systemtap, but unfortunately
+ that's racy with multiple concurrent probes. So now we set
+ _stp_proc_root to proc_root. This way, /proc/stap_XXXX
+ rather than /proc/systemtap/stap_XXXX will be the directory
+ under which cmd/ etc. will show up. */
+ _stp_proc_root = NULL;
/* now create /proc/systemtap/module_name */
_stp_proc_mod = proc_mkdir (THIS_MODULE->name, _stp_proc_root);
@@ -380,7 +370,7 @@ err1:
}
#endif
- remove_proc_entry (THIS_MODULE->name, _stp_proc_root);
+ remove_proc_entry (THIS_MODULE->name, _stp_proc_root);
err0:
list_for_each_safe(p, tmp, &_stp_pool_q) {
list_del(p);
@@ -409,7 +399,7 @@ static void _stp_unregister_procfs (void)
}
#endif
remove_proc_entry ("cmd", _stp_proc_mod);
- remove_proc_entry (THIS_MODULE->name, _stp_proc_root); /* XXX: race condition */
+ remove_proc_entry (THIS_MODULE->name, _stp_proc_root);
/* free memory pools */
list_for_each_safe(p, tmp, &_stp_pool_q) {