shell hung in fork system call

From: John F Carr <jfc_at_mit.edu>
Date: Sun, 09 Jul 2023 22:41:27 UTC
Kernel and system at a146207d66f320ed239c1059de9df854b66b55b7 plus some irrelevant local changes, four 64 bit ARM processors, make.conf sets CPUTYPE?=cortex-a57.

I typed ^C while /bin/sh was starting a pipeline and my shell got hung in the middle of fork().

From the terminal:

# git log --oneline --|more
^C^C^C
load: 3.26  cmd: sh 95505 [fork] 5308.67r 0.00u 0.03s 0% 2860k
mi_switch+0x198 sleepq_switch+0xfc sleepq_timedwait+0x40 _sleep+0x264 fork1+0x67c sys_fork+0x34 do_el0_sync+0x4c8 handle_el0_sync+0x44 
load: 3.16  cmd: sh 95505 [fork] 5311.75r 0.00u 0.03s 0% 2860k
mi_switch+0x198 sleepq_switch+0xfc sleepq_timedwait+0x40 _sleep+0x264 fork1+0x67c sys_fork+0x34 do_el0_sync+0x4c8 handle_el0_sync+0x44 

According to ps -d on another terminal the shell has no children:

  PID TT  STAT       TIME COMMAND
[...]
  873 u0  IWs     0:00.00 `-- login [pam] (login)
  874 u0  I       0:00.17   `-- -sh (sh)
95504 u0  I       0:00.01     `-- su -
95505 u0  D+      0:00.05       `-- -su (sh)
[...]

Nothing on the (115200 bps serial) console.  No change in system performance.

The system is busy copying a large amount of data from the network to a ZFS pool on spinning disks.  The git|more pipeline could have taken some time to get going while I/O requests worked their way through the queue.  It would not have touched the busy pool, only the zroot pool on an SSD.

Has anything changed recently that might cause this?