mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jiri Olsa <jolsa@kernel.org>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: lkml <linux-kernel@vger.kernel.org>,
	"David Ahern" <dsahern@gmail.com>,
	"Ingo Molnar" <mingo@kernel.org>,
	"Namhyung Kim" <namhyung@kernel.org>,
	"Peter Zijlstra" <a.p.zijlstra@chello.nl>,
	"Matt Fleming" <matt@codeblueprint.co.uk>,
	"Raphaël Beamonte" <raphael.beamonte@gmail.com>,
	"Steven Rostedt" <rostedt@goodmis.org>
Subject: [PATCH 11/15] tools lib api: Add mount support for fs
Date: Wed,  2 Sep 2015 09:56:41 +0200	[thread overview]
Message-ID: <1441180605-24737-12-git-send-email-jolsa@kernel.org> (raw)
In-Reply-To: <1441180605-24737-1-git-send-email-jolsa@kernel.org>

Adding name__mount (where name is in sysfs,procfs,debugfs,tracefs)
interface that tries to mount the filesystem in case no mount is found.

Link: http://lkml.kernel.org/n/tip-ja49vwfiq2qqkmoxx9yk26lm@git.kernel.org
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
 tools/lib/api/fs/fs.c | 44 +++++++++++++++++++++++++++++++++++++++-----
 tools/lib/api/fs/fs.h | 15 +++++++++++----
 2 files changed, 50 insertions(+), 9 deletions(-)

diff --git a/tools/lib/api/fs/fs.c b/tools/lib/api/fs/fs.c
index ef16d2a83a27..bc93baf33fff 100644
--- a/tools/lib/api/fs/fs.c
+++ b/tools/lib/api/fs/fs.c
@@ -9,6 +9,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
+#include <sys/mount.h>
 
 #include "debugfs.h"
 #include "fs.h"
@@ -215,16 +216,49 @@ static const char *fs__mountpoint(int idx)
 	return fs__get_mountpoint(fs);
 }
 
-#define FS__MOUNTPOINT(name, idx)	\
+static const char *mount_overload(struct fs *fs)
+{
+	size_t name_len = strlen(fs->name);
+	/* "PERF_" + name + "_ENVIRONMENT" + '\0' */
+	char upper_name[5 + name_len + 12 + 1];
+
+	snprintf(upper_name, name_len, "PERF_%s_ENVIRONMENT", fs->name);
+	mem_toupper(upper_name, name_len);
+
+	return getenv(upper_name) ?: *fs->mounts;
+}
+
+static const char *fs__mount(int idx)
+{
+	struct fs *fs = &fs__entries[idx];
+	const char *mountpoint;
+
+	if (fs__mountpoint(idx))
+		return (const char *)fs->path;
+
+	mountpoint = mount_overload(fs);
+
+	if (mount(NULL, mountpoint, fs->name, 0, NULL) < 0)
+		return NULL;
+
+	return fs__check_mounts(fs) ? fs->path : NULL;
+}
+
+#define FS(name, idx)			\
 const char *name##__mountpoint(void)	\
 {					\
 	return fs__mountpoint(idx);	\
+}					\
+					\
+const char *name##__mount(void)		\
+{					\
+	return fs__mount(idx);		\
 }
 
-FS__MOUNTPOINT(sysfs,   FS__SYSFS);
-FS__MOUNTPOINT(procfs,  FS__PROCFS);
-FS__MOUNTPOINT(debugfs, FS__DEBUGFS);
-FS__MOUNTPOINT(tracefs, FS__TRACEFS);
+FS(sysfs,   FS__SYSFS);
+FS(procfs,  FS__PROCFS);
+FS(debugfs, FS__DEBUGFS);
+FS(tracefs, FS__TRACEFS);
 
 int filename__read_int(const char *filename, int *value)
 {
diff --git a/tools/lib/api/fs/fs.h b/tools/lib/api/fs/fs.h
index 9013227ae0d1..a9627ea5e6ae 100644
--- a/tools/lib/api/fs/fs.h
+++ b/tools/lib/api/fs/fs.h
@@ -9,10 +9,17 @@
 #define PATH_MAX 4096
 #endif
 
-const char *sysfs__mountpoint(void);
-const char *procfs__mountpoint(void);
-const char *debugfs__mountpoint(void);
-const char *tracefs__mountpoint(void);
+#define FS(name)				\
+	const char *name##__mountpoint(void);	\
+	const char *name##__mount(void);
+
+FS(sysfs)
+FS(procfs)
+FS(debugfs)
+FS(tracefs)
+
+#undef FS
+
 
 int filename__read_int(const char *filename, int *value);
 int sysctl__read_int(const char *sysctl, int *value);
-- 
2.4.3


  parent reply	other threads:[~2015-09-02  7:57 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-02  7:56 [PATCH 00/15] perf tools: Cleanup filesystem api Jiri Olsa
2015-09-02  7:56 ` [PATCH 01/15] perf tools: Fix parse_events_add_pmu caller Jiri Olsa
2015-09-02 13:00   ` Arnaldo Carvalho de Melo
2015-09-02 13:34     ` Jiri Olsa
2015-09-05 14:00   ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 02/15] perf tools: Remove mountpoint arg from perf_debugfs_mount Jiri Olsa
2015-09-08 14:32   ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 03/15] perf tools: Move tracing_path stuff under same namespace Jiri Olsa
2015-09-08 14:33   ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 04/15] perf tools: Move tracing_path interface into api/fs/tracing_path.c Jiri Olsa
2015-09-04 11:35   ` Matt Fleming
2015-09-04 13:28     ` Raphaël Beamonte
2015-09-08 14:33   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 05/15] tools lib api: Move debugfs__strerror_open into tracing_path.c object Jiri Olsa
2015-09-02 13:12   ` Arnaldo Carvalho de Melo
2015-09-04 11:36   ` Matt Fleming
2015-09-04 13:41   ` Raphaël Beamonte
2015-09-04 13:48     ` Jiri Olsa
2015-09-04 13:51       ` Raphaël Beamonte
2015-09-08 14:33   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 06/15] tools lib api: Make tracing_path_strerror_open message generic Jiri Olsa
2015-09-02 13:18   ` Arnaldo Carvalho de Melo
2015-09-02 13:44     ` Jiri Olsa
2015-09-02 14:16       ` Arnaldo Carvalho de Melo
2015-09-15  6:59   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 07/15] tools lib api: Add STR and PATH_MAX macros to fs object Jiri Olsa
2015-09-08 14:34   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 08/15] tools lib api: Move SYSFS_MAGIC PROC_SUPER_MAGIC into fs.c Jiri Olsa
2015-09-08 14:34   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 09/15] tools lib api: Add debugfs into fs.c object Jiri Olsa
2015-09-08 14:34   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 10/15] tools lib api: Add tracefs " Jiri Olsa
2015-09-08 14:35   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-02  7:56 ` Jiri Olsa [this message]
2015-09-04 14:14   ` [PATCH 11/15] tools lib api: Add mount support for fs Raphaël Beamonte
2015-09-04 14:20     ` Steven Rostedt
2015-09-04 14:26     ` Jiri Olsa
2015-09-04 14:57       ` Steven Rostedt
2015-09-04 15:00         ` Steven Rostedt
2015-09-04 15:12           ` Raphaël Beamonte
2015-09-08 14:35   ` [tip:perf/core] tools lib api fs: Add FSTYPE__mount() method tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 12/15] tools lib api: Add configured support for fs Jiri Olsa
2015-09-02 13:39   ` Arnaldo Carvalho de Melo
2015-09-02 13:41     ` Arnaldo Carvalho de Melo
2015-09-02 13:46     ` Jiri Olsa
2015-09-02 14:17       ` Arnaldo Carvalho de Melo
2015-09-02 16:52         ` Arnaldo Carvalho de Melo
2015-09-04  7:08           ` Jiri Olsa
2015-09-04 16:42             ` Arnaldo Carvalho de Melo
2015-09-04 17:45               ` Jiri Olsa
2015-09-08 14:35   ` [tip:perf/core] tools lib api fs: Add FSTYPE__configured() method tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 13/15] tools lib api: Replace debugfs/tracefs objects interface with fs.c Jiri Olsa
2015-09-15  6:59   ` [tip:perf/core] tools lib api fs: Replace debugfs/ tracefs " tip-bot for Jiri Olsa
2015-09-02  7:56 ` [PATCH 14/15] tools lib api: Remove debugfs, tracefs and findfs objects Jiri Olsa
2015-09-15  6:59   ` [tip:perf/core] tools lib api fs: " tip-bot for Jiri Olsa
2015-09-22  0:20     ` Vinson Lee
2015-09-22 13:53       ` Arnaldo Carvalho de Melo
2015-09-22 21:29         ` Vinson Lee
2015-09-23  8:23       ` Matt Fleming
2015-09-23  8:39         ` Jiri Olsa
2015-09-23 10:08           ` Matt Fleming
2015-09-24 15:05             ` Michael Petlan
2015-10-07 20:10               ` Matt Fleming
2015-10-13 19:18                 ` Arnaldo Carvalho de Melo
2015-09-23 13:44           ` Arnaldo Carvalho de Melo
2015-09-23 13:50             ` Jiri Olsa
2015-09-23 13:54               ` Arnaldo Carvalho de Melo
2015-09-24 12:15             ` Matt Fleming
2015-09-24 14:29               ` Arnaldo Carvalho de Melo
2015-09-02  7:56 ` [PATCH 15/15] perf tools: Switch to tracing_path interface on appropriate places Jiri Olsa
2015-09-15  7:00   ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-09-02  8:01 ` [PATCH 00/15] perf tools: Cleanup filesystem api Jiri Olsa

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1441180605-24737-12-git-send-email-jolsa@kernel.org \
    --to=jolsa@kernel.org \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=dsahern@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matt@codeblueprint.co.uk \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=raphael.beamonte@gmail.com \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome