summaryrefslogtreecommitdiffstats
path: root/testsuite
diff options
context:
space:
mode:
authorJeff Moyer <jmoyer@redhat.com>2009-07-17 15:19:26 -0400
committerFrank Ch. Eigler <fche@elastic.org>2009-07-17 15:19:26 -0400
commit003ea323310bd597c7263344cefd232377d8d89e (patch)
tree660a586d7a20863ecedb885f1200c4865b81876d /testsuite
parentea14cf671a7ad543ad4752b301883789ab86f70f (diff)
downloadsystemtap-steved-003ea323310bd597c7263344cefd232377d8d89e.tar.gz
systemtap-steved-003ea323310bd597c7263344cefd232377d8d89e.tar.xz
systemtap-steved-003ea323310bd597c7263344cefd232377d8d89e.zip
PR10410: dentry tapset, autofs4 sample
* tapset/dentry.stp: New d_path, d_name, reverse_path_walk. * .../examples/.../autofs4.*: New autofs demo. Signed-off-by: Frank Ch. Eigler <fche@elastic.org>
Diffstat (limited to 'testsuite')
-rw-r--r--testsuite/systemtap.examples/network/autofs4.meta8
-rw-r--r--testsuite/systemtap.examples/network/autofs4.stp94
2 files changed, 102 insertions, 0 deletions
diff --git a/testsuite/systemtap.examples/network/autofs4.meta b/testsuite/systemtap.examples/network/autofs4.meta
new file mode 100644
index 00000000..16ae7297
--- /dev/null
+++ b/testsuite/systemtap.examples/network/autofs4.meta
@@ -0,0 +1,8 @@
+title: Watch autofs4 operations
+description: Trace key autofs4 operations such as mounting or unmounting remote filesystems.
+name: autofs4.stp
+author: Jeff Moyer
+keywords: network autofs nfs
+subsystem: network
+test_check: stap -p4 autofs4.stp
+test_installcheck: stap autofs4.stp -c "sleep 10"
diff --git a/testsuite/systemtap.examples/network/autofs4.stp b/testsuite/systemtap.examples/network/autofs4.stp
new file mode 100644
index 00000000..19a27ee4
--- /dev/null
+++ b/testsuite/systemtap.examples/network/autofs4.stp
@@ -0,0 +1,94 @@
+#! /usr/bin/env stap
+
+// Copyright (c) 2009 Red Hat Inc.
+//
+// This file is part of systemtap, and is free software. You can
+// redistribute it and/or modify it under the terms of the GNU General
+// Public License (GPL); either version 2, or (at your option) any
+// later version.
+
+
+probe module("autofs4").function("autofs4_lookup")
+{
+ /*
+ * Don't log automounts travels in its own directory hierarchy, as
+ * they are treated differently, and certainly not something that is
+ * useful for admins to see.
+ */
+ if (!isinstr(execname(), "automount")) {
+ printf("%s process %s[%d] looking up %s%s\n",
+ ctime(gettimeofday_s()), execname(), pid(),
+ d_path($nd), d_name($dentry));
+ }
+}
+
+
+probe module("autofs4").function("autofs4_follow_link")
+{
+ if (!isinstr(execname(), "automount")) {
+ /*
+ * dentry->d_name will be '/' for the mount trigger. Thus,
+ * the path that the trigger lives on is one level up the
+ * directory stack, and the root of that is yet another level
+ * up.
+ */
+ printf("%s process %s[%d] following mount trigger %s\n",
+ ctime(gettimeofday_s()), execname(), pid(),
+ d_path($nd));
+ }
+}
+
+
+/*
+probe module("autofs4").function("autofs4_expire_direct").return
+{
+ if ($return != 0) {
+ relative_path = reverse_path_walk($mnt->mnt_mountpoint)
+ root_path = reverse_path_walk($mnt->mnt_parent->mnt_mountpoint)
+ printf("%s process %s[%d] expiring direct mount /%s/%s\n",
+ ctime(gettimeofday_s()), execname(), pid(),
+ root_path, relative_path)
+ }
+}
+
+probe
+module("autofs4").statement("autofs4_expire_direct@fs/autofs4/expire.c+17") ?
+{
+ relative_path = reverse_path_walk($mnt->mnt_mountpoint)
+ root_path = reverse_path_walk($mnt->mnt_parent->mnt_mountpoint)
+ printf("%s process %s[%d] expiring direct mount /%s/%s\n",
+ ctime(gettimeofday_s()), execname(), pid(),
+ root_path, relative_path)
+}
+*/
+
+probe module("autofs4").function("autofs4_expire_indirect").return
+{
+ if ($return != 0) {
+ relative_path = reverse_path_walk($return)
+ root_path = reverse_path_walk($mnt->mnt_mountpoint)
+ printf("%s process %s[%d] expiring indirect mount /%s%s\n",
+ ctime(gettimeofday_s()), execname(), pid(),
+ root_path, relative_path)
+ }
+}
+
+
+/*
+ * The struct dentry's name may be '/' if this is a mount trigger, which
+ * is not really something that is useful to print out. Instead, we just
+ * indicate whether a mount or umount succeeded or failed. Coupled with the
+ * messages printed out when looking up a directory and traversing a symlink,
+ * this should be relatively easy to correlate to the appropriate directory.
+ */
+probe module("autofs4").function("autofs4_wait").return
+{
+ if ($notify > 0) {
+ dname = d_name($dentry)
+ printf("%s %s of %s %s\n",
+ ctime(gettimeofday_s()),
+ ($notify==1?"mount":"unmount"),
+ dname,
+ $return == 0?"succeeded":"failed")
+ }
+}