ZFS booting without partitions
Henri Hennebert
hlh at restart.be
Fri Jun 5 19:34:12 UTC 2009
Kip Macy wrote:
> On Mon, Jun 1, 2009 at 10:21 AM, Adam McDougall <mcdouga9 at egr.msu.edu> wrote:
>> I'm thinking that too. I spent some time taking stabs at figuring it out
>> yesterday but didn't get anywhere useful. I did try compiling the -current
>> src/sys/boot tree on 7.2 after a couple header tweaks to make it compile but
>> the loader still didn't work. The working loader is the same file size as
>> the broken loader unless it was compiled on i386 and then it is ~30k bigger
>> for some reason (it shrinks to the same size as the rest if I force it to
>> use the same 32bit compilation flags as used on amd64). Just mentioning
>> this in case it saves someone else some time. I'm real pleased it works at
>> all.
>
> If someone has the time to track down the differences I'll MFC them.
> I'm not using ZFS boot at the moment so I have no way of testing.
>
At last I get this F.....G diff!!!
The problem was in libstand.a. By the way , the patch also take into
account the update of Doug Rabson to answer my problem with too many
devices / pools.
Happy to help on this one.
> Cheers,
> Kip
-------------- next part --------------
--- lib/libstand/stand.h.orig 2007-01-09 02:02:04.000000000 +0100
+++ lib/libstand/stand.h 2009-06-03 17:24:42.627552341 +0200
@@ -167,7 +167,7 @@
#define SOPEN_RASIZE 512
};
-#define SOPEN_MAX 8
+#define SOPEN_MAX 64
extern struct open_file files[];
/* f_flags values */
--- lib/libstand/nfs.c.orig 2004-01-21 21:12:23.000000000 +0100
+++ lib/libstand/nfs.c 2009-06-05 20:36:26.001368421 +0200
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/lib/libstand/nfs.c,v 1.12 2004/01/21 20:12:23 jhb Exp $");
+__FBSDID("$FreeBSD: src/lib/libstand/nfs.c,v 1.14 2008/11/21 09:14:29 luigi Exp $");
#include <sys/param.h>
#include <sys/time.h>
@@ -405,16 +405,23 @@
#ifdef NFS_DEBUG
if (debug)
- printf("nfs_open: %s (rootpath=%s)\n", path, rootpath);
+ printf("nfs_open: %s (rootpath=%s)\n", upath, rootpath);
#endif
if (!rootpath[0]) {
printf("no rootpath, no nfs\n");
return (ENXIO);
}
+ /*
+ * This is silly - we should look at dv_type but that value is
+ * arch dependant and we can't use it here.
+ */
#ifndef __i386__
if (strcmp(f->f_dev->dv_name, "net") != 0)
return(EINVAL);
+#else
+ if (strcmp(f->f_dev->dv_name, "pxe") != 0)
+ return(EINVAL);
#endif
if (!(desc = socktodesc(*(int *)(f->f_devdata))))
More information about the freebsd-stable
mailing list