From: Jiri Olsa <jolsa@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Jiri Olsa <jolsa@kernel.org>,
Arnaldo Carvalho de Melo <acme@redhat.com>,
Corey Ashford <cjashfor@linux.vnet.ibm.com>,
David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Stephane Eranian <eranian@google.com>,
Steven Rostedt <rostedt@goodmis.org>
Subject: [PATCH 8/8] perf buildid-cache: Try to remove empty directories
Date: Mon, 1 Dec 2014 20:06:29 +0100 [thread overview]
Message-ID: <1417460789-13874-9-git-send-email-jolsa@kernel.org> (raw)
In-Reply-To: <1417460789-13874-1-git-send-email-jolsa@kernel.org>
The cache removal routine only removes files leaving
directories untouched. Adding code that tries to
remove directories up to the 'buildid_dir' level.
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Stephane Eranian <eranian@google.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
---
tools/perf/util/build-id.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 0c72680a977f..c5dc066db6e9 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -329,11 +329,41 @@ static int build_id_cache__add_b(const u8 *build_id, size_t build_id_size,
is_kallsyms, is_vdso);
}
+/*
+ * Tries to remove directory of the file given in
+ * the @file parameter. It might change the string
+ * pointed to by the @file pointer.
+ */
+static void try_remove_dir(char *file, const char *debugdir)
+{
+ char *dir = dirname(file);
+
+ while (dir) {
+ char *slash;
+
+ if (!strcmp(dir, debugdir))
+ return;
+
+ pr_debug("try_remove_dir %s\n", dir);
+
+ /* We dont care if it failes, we tried.. */
+ if (rmdir(dir))
+ return;
+
+ slash = strrchr(dir, '/');
+ if (!slash)
+ return;
+
+ *slash = 0;
+ }
+}
+
int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir)
{
const size_t size = PATH_MAX;
char *filename = zalloc(size),
- *linkname = zalloc(size);
+ *linkname = zalloc(size),
+ *build_id_link = NULL;
int err = -1;
if (filename == NULL || linkname == NULL)
@@ -351,6 +381,10 @@ int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir)
if (unlink(linkname))
goto out_free;
+ build_id_link = strdup(linkname);
+ if (!build_id_link)
+ goto out_free;
+
/*
* Since the link is relative, we must make it absolute:
*/
@@ -360,10 +394,18 @@ int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir)
if (unlink(linkname))
goto out_free;
+ /*
+ * The order matters here, because linkname path
+ * is based on build_id_link path.
+ */
+ try_remove_dir(linkname, debugdir);
+ try_remove_dir(build_id_link, debugdir);
+
err = 0;
out_free:
free(filename);
free(linkname);
+ free(build_id_link);
return err;
}
--
1.9.3
next prev parent reply other threads:[~2014-12-01 19:07 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-01 19:06 [PATCH 0/8] perf buildid-cache: Add clean command Jiri Olsa
2014-12-01 19:06 ` [PATCH 1/8] perf tools: Use single strcmp call instead of two Jiri Olsa
2014-12-12 8:16 ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2014-12-01 19:06 ` [PATCH 2/8] perf tools: Remove extra debugdir variables Jiri Olsa
2014-12-12 8:17 ` [tip:perf/urgent] perf buildid-cache: " tip-bot for Jiri Olsa
2014-12-01 19:06 ` [PATCH 3/8] perf tools: Add --buildid-dir option to set cache directory Jiri Olsa
2014-12-05 15:36 ` Arnaldo Carvalho de Melo
2014-12-12 8:17 ` [tip:perf/urgent] " tip-bot for Jiri Olsa
2014-12-01 19:06 ` [PATCH 4/8] perf buildid-cache: Add clean command Jiri Olsa
2014-12-01 19:06 ` [PATCH 5/8] perf buildid-cache: Add automated tests Jiri Olsa
2014-12-05 15:30 ` Arnaldo Carvalho de Melo
2014-12-06 12:12 ` Jiri Olsa
2014-12-01 19:06 ` [PATCH 6/8] perf buildid cache: Fix -a segfault Jiri Olsa
2014-12-05 15:30 ` Arnaldo Carvalho de Melo
2014-12-12 8:17 ` [tip:perf/urgent] perf buildid cache: Fix -a segfault related to kcore handling tip-bot for Jiri Olsa
2014-12-01 19:06 ` [PATCH 7/8] perf buildid-cache: Fix kallsyms removal Jiri Olsa
2014-12-01 19:06 ` Jiri Olsa [this message]
2014-12-01 22:29 ` [PATCH 0/8] perf buildid-cache: Add clean command Arnaldo Carvalho de Melo
2014-12-02 12:25 ` Jiri Olsa
2014-12-02 14:10 ` Arnaldo Carvalho de Melo
2014-12-03 8:13 ` Namhyung Kim
2014-12-03 13:38 ` 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=1417460789-13874-9-git-send-email-jolsa@kernel.org \
--to=jolsa@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@redhat.com \
--cc=cjashfor@linux.vnet.ibm.com \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.