https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=254177

            Bug ID: 254177
           Summary: When ZFS is recognized, An i386 machine with a lot of
                    memory hangs.
           Product: Base System
           Version: 13.0-STABLE
          Hardware: i386
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: b...@freebsd.org
          Reporter: btren...@yahoo.co.jp

When ZFS is recognized, An i386 machine with a lot of memory hangs on FreeBSD
13.0-RC1 (git 60e8939aa85b07f3271dcc01730727dda04c8bf6).

It  occurs on line 799th of /usr/src/sys/contrib/openzfs/module/zfs/dbuf.c 

        while (hsize * zfs_arc_average_blocksize < physmem * PAGESIZE)
                hsize <<= 1;

My machine has 24GB of memory,  so `physmem' is 0x59B9AD and `PAGESIZE' is
0x1000, but `physmem * PAGESIZE'  overflows to 0x9B9AD000.  Then the condition
of the while statement may always be true, and this statement goes into an
eternal loop.



To fix that immediately, that line will be changed to

        while (hsize * zfs_arc_average_blocksize < (uint64_t)physmem *
PAGESIZE)

or

        while (hsize / PAGESIZE * zfs_arc_average_blocksize < physmem)

On the other hand, that problem comes from the type of the variable `physmem'
which is declared on line 65th of /usr/src/sys/sys/systm.h for kernel,

extern long physmem;            /* physical memory */

and on line 54th of  /usr/src/sys/contrib/openzfs/lib/libzpool/kernel.c for
userland.

uint64_t physmem;

That problem does not occur on amd64, because the sizeof(long) is different.

-- 
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
freebsd-bugs@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to