grub-devel
[Top][All Lists]
Advanced

[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";
>  



reply via email to

[Prev in Thread] Current Thread [Next in Thread]