[Bug 294369] powerpc64: panic in zfs_write() during buildworld

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 12 Jul 2026 17:28:14 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=294369

Jessica Clarke <jrtc27@freebsd.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|bugs@FreeBSD.org            |jrtc27@freebsd.org
                 CC|                            |jrtc27@freebsd.org
             Status|New                         |In Progress

--- Comment #4 from Jessica Clarke <jrtc27@freebsd.org> ---
As discussed on IRC, I believe this is fixed by
https://github.com/llvm/llvm-project/pull/207555. Looking at the "FreeBSD
16.0-CURRENT #0 main-n287202-759ce9a2b38e: Mon Jul  6 15:57:12 UTC 2026"
snapshot:

The kernel's pmap_remove_write ends up as an STT_FUNC symbol pointing at an
IPLT (called .glink on PowerPC, but merged into .text by ldscript.powerpc*):

  7479: 00000000001014a0     0 FUNC    GLOBAL DEFAULT [<other: 0x60>]   2
pmap_remove_write

00000000001014a0 <pmap_remove_write>:
  1014a0: 15 00 82 3d   addis 12, 2, 21
  1014a4: a0 7f 8c e9   ld 12, 32672(12)
  1014a8: a6 03 89 7d   mtctr 12
  1014ac: 20 04 80 4e   bctr

update_pages in zfs.ko calls, via the (presumably inlined page_busy),
pmap_remove_write:

void
update_pages(znode_t *zp, int64_t start, int len, objset_t *os)
{
        ...
                if ((pp = page_busy(vp, start, off, nbytes)) != NULL) {

static vm_page_t
page_busy(vnode_t *vp, int64_t start, int64_t off, int64_t nbytes)
{
        ...
                pmap_remove_write(pp);

This will resolve to the above IPLT entry, being called with page_busy's
context, including presumably a TOC pointer for page_busy/zfs.ko, not the
kernel.

-- 
You are receiving this mail because:
You are the assignee for the bug.