Kip Macy wrote:
On Mon, Jun 1, 2009 at 10:21 AM, Adam McDougall <> 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

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.


--- 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);
        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)
+       if (strcmp(f->f_dev->dv_name, "pxe") != 0)
+               return(EINVAL);
        if (!(desc = socktodesc(*(int *)(f->f_devdata))))
_______________________________________________ mailing list
To unsubscribe, send any mail to ""

Reply via email to