diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c index 8f691e0..fb47969 100644 --- a/grub-core/loader/i386/bsd.c +++ b/grub-core/loader/i386/bsd.c @@ -415,11 +415,15 @@ grub_freebsd_add_meta_module (const char *filename, const char *type, grub_addr_t addr, grub_uint32_t size) { const char *name; - name = grub_strrchr (filename, '/'); + /* Don't strip the full path, some FreeBSD functionality, such + * as kldstat(2) / dtrace, rely on this. Instead we only need to remove + * any ZFS dataset information first. */ + name = grub_strrchr (filename, '@'); if (name) name++; else name = filename; + if (grub_strcmp (type, "/boot/zfs/zpool.cache") == 0) name = "/boot/zfs/zpool.cache";