perf sdt: Show proper hint when event not yet in place via 'perf probe'
[sfrench/cifs-2.6.git] / tools / lib / api / fs / tracing_path.c
index 251b7c342a87d1d78cbef0cebe2e6aafbb10588d..3e606b9c443efb77e75842cb80cfd10f92dae5bc 100644 (file)
@@ -86,9 +86,13 @@ void put_tracing_file(char *file)
        free(file);
 }
 
-static int strerror_open(int err, char *buf, size_t size, const char *filename)
+int tracing_path__strerror_open_tp(int err, char *buf, size_t size,
+                                  const char *sys, const char *name)
 {
        char sbuf[128];
+       char filename[PATH_MAX];
+
+       snprintf(filename, PATH_MAX, "%s/%s", sys, name ?: "*");
 
        switch (err) {
        case ENOENT:
@@ -99,10 +103,19 @@ static int strerror_open(int err, char *buf, size_t size, const char *filename)
                 * - jirka
                 */
                if (debugfs__configured() || tracefs__configured()) {
-                       snprintf(buf, size,
-                                "Error:\tFile %s/%s not found.\n"
-                                "Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n",
-                                tracing_events_path, filename);
+                       /* sdt markers */
+                       if (!strncmp(filename, "sdt_", 4)) {
+                               snprintf(buf, size,
+                                       "Error:\tFile %s/%s not found.\n"
+                                       "Hint:\tSDT event cannot be directly recorded on.\n"
+                                       "\tPlease first use 'perf probe %s:%s' before recording it.\n",
+                                       tracing_events_path, filename, sys, name);
+                       } else {
+                               snprintf(buf, size,
+                                        "Error:\tFile %s/%s not found.\n"
+                                        "Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n",
+                                        tracing_events_path, filename);
+                       }
                        break;
                }
                snprintf(buf, size, "%s",
@@ -125,12 +138,3 @@ static int strerror_open(int err, char *buf, size_t size, const char *filename)
 
        return 0;
 }
-
-int tracing_path__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name)
-{
-       char path[PATH_MAX];
-
-       snprintf(path, PATH_MAX, "%s/%s", sys, name ?: "*");
-
-       return strerror_open(err, buf, size, path);
-}