[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Patch to fix kldstat(2) / dtrace when booting FreeBSD
From: |
Andrei Borzenkov |
Subject: |
Re: Patch to fix kldstat(2) / dtrace when booting FreeBSD |
Date: |
Sun, 11 Jan 2015 21:27:44 +0300 |
В Fri, 09 Jan 2015 11:31:26 -0500
Kris Moore <address@hidden> пишет:
>
> The following patch fixes an important issue when booting FreeBSD.
> FreeBSD's kldstat(2) function expects that the full pathname will be
> provided to kernel / modules. The current GRUB was striping this out and
> only leaving the filename itself. This broke dtrace and other things
> which used the full pathname to locate the kernel or modules on disk.
>
> The attached patch fixes this behavior.
>
> 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, '@');
What if filename itself contains '@'? Is it possible?
> if (name)
> name++;
> else
> name = filename;
> +
Please, could we avoid unrelated formatting changes?
> if (grub_strcmp (type, "/boot/zfs/zpool.cache") == 0)
> name = "/boot/zfs/zpool.cache";
>