tools api fs: Cache cgroupfs mount point
Currently it parses the /proc file everytime it opens a file in the cgroupfs. Save the last result to avoid it (assuming it won't be changed between the accesses). Signed-off-by: Namhyung Kim <namhyung@kernel.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Stephane Eranian <eranian@google.com> Link: http://lore.kernel.org/lkml/20201216090556.813996-3-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
6fd99b7f62
commit
48859e5293
|
@ -8,6 +8,14 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "fs.h"
|
#include "fs.h"
|
||||||
|
|
||||||
|
struct cgroupfs_cache_entry {
|
||||||
|
char subsys[32];
|
||||||
|
char mountpoint[PATH_MAX];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* just cache last used one */
|
||||||
|
static struct cgroupfs_cache_entry cached;
|
||||||
|
|
||||||
int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
@ -16,6 +24,14 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
||||||
char *p, *path;
|
char *p, *path;
|
||||||
char mountpoint[PATH_MAX];
|
char mountpoint[PATH_MAX];
|
||||||
|
|
||||||
|
if (!strcmp(cached.subsys, subsys)) {
|
||||||
|
if (strlen(cached.mountpoint) < maxlen) {
|
||||||
|
strcpy(buf, cached.mountpoint);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
fp = fopen("/proc/mounts", "r");
|
fp = fopen("/proc/mounts", "r");
|
||||||
if (!fp)
|
if (!fp)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -75,6 +91,9 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
||||||
free(line);
|
free(line);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
strncpy(cached.subsys, subsys, sizeof(cached.subsys) - 1);
|
||||||
|
strcpy(cached.mountpoint, mountpoint);
|
||||||
|
|
||||||
if (mountpoint[0] && strlen(mountpoint) < maxlen) {
|
if (mountpoint[0] && strlen(mountpoint) < maxlen) {
|
||||||
strcpy(buf, mountpoint);
|
strcpy(buf, mountpoint);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue