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 "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)
|
||||
{
|
||||
FILE *fp;
|
||||
|
@ -16,6 +24,14 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
|||
char *p, *path;
|
||||
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");
|
||||
if (!fp)
|
||||
return -1;
|
||||
|
@ -75,6 +91,9 @@ int cgroupfs_find_mountpoint(char *buf, size_t maxlen, const char *subsys)
|
|||
free(line);
|
||||
fclose(fp);
|
||||
|
||||
strncpy(cached.subsys, subsys, sizeof(cached.subsys) - 1);
|
||||
strcpy(cached.mountpoint, mountpoint);
|
||||
|
||||
if (mountpoint[0] && strlen(mountpoint) < maxlen) {
|
||||
strcpy(buf, mountpoint);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue