for (i = 0; i < MAX_OP; i++) {
fn_name = fs_configs[fs_type].op_funcs[i];
module = fs_configs[fs_type].fs;
- if (fn_name && !fentry_exists(fn_name, NULL)
- && !fentry_exists(fn_name, module)) {
+ if (fn_name && !fentry_exists(fn_name, module)) {
support_fentry = false;
break;
}
for (i = 0; i < MAX_OP; i++) {
fn_name = fs_configs[fs_type].op_funcs[i];
module = fs_configs[fs_type].fs;
- if (fn_name && !fentry_exists(fn_name, NULL)
- && !fentry_exists(fn_name, module)) {
+ if (fn_name && !fentry_exists(fn_name, module)) {
support_fentry = false;
break;
}
sysfs_vmlinux, strerror(-libbpf_get_error(base)));
goto err_out;
}
- if (mod) {
+ if (mod && module_btf_exists(mod)) {
snprintf(sysfs_mod, sizeof(sysfs_mod), "/sys/kernel/btf/%s", mod);
btf = btf__parse_split(sysfs_mod, base);
if (libbpf_get_error(btf)) {
fprintf(stderr, "failed to load BTF from %s: %s\n",
sysfs_mod, strerror(-libbpf_get_error(btf)));
- goto err_out;
+ btf = base;
+ base = NULL;
}
} else {
btf = base;
+ base = NULL;
}
id = btf__find_by_name_kind(btf, "bpf_attach_type", BTF_KIND_ENUM);
}
err_out:
- if (mod)
- btf__free(btf);
+ btf__free(btf);
btf__free(base);
return id > 0;
}
*
* *name* is the name of a kernel function to be attached to, which can be
* from vmlinux or a kernel module.
- * *mod* is the name of a kernel module, if NULL, it means *name*
- * belongs to vmlinux.
+ * *mod* is a hint that indicates the *name* may reside in module BTF,
+ * if NULL, it means *name* belongs to vmlinux.
*/
bool fentry_exists(const char *name, const char *mod);