]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
perf build-id: Add check for existing link in buildid dir
authorJiri Olsa <jolsa@kernel.org>
Thu, 26 Nov 2020 17:00:11 +0000 (18:00 +0100)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 27 Nov 2020 11:36:58 +0000 (08:36 -0300)
When adding new build id link we fail if the link is already there.
Adding check for existing link and output debug message that the build
id is already linked.

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Song Liu <songliubraving@fb.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20201126170026.2619053-11-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/build-id.c

index 2aacc8b29f7e166c03f528fb71e8424853610416..4a391f13f40d0cf3364da27d343df7ec962cb305 100644 (file)
@@ -755,8 +755,25 @@ int build_id_cache__add_s(const char *sbuild_id, const char *name,
        tmp = dir_name + strlen(buildid_dir) - 5;
        memcpy(tmp, "../..", 5);
 
-       if (symlink(tmp, linkname) == 0)
+       if (symlink(tmp, linkname) == 0) {
                err = 0;
+       } else if (errno == EEXIST) {
+               char path[PATH_MAX];
+               ssize_t len;
+
+               len = readlink(linkname, path, sizeof(path) - 1);
+               if (len <= 0) {
+                       pr_err("Cant read link: %s\n", linkname);
+                       goto out_free;
+               }
+               path[len] = '\0';
+
+               if (strcmp(tmp, path)) {
+                       pr_debug("build <%s> already linked to %s\n",
+                                sbuild_id, linkname);
+               }
+               err = 0;
+       }
 
        /* Update SDT cache : error is just warned */
        if (realname &&