On the rockpro64 as well as on the rpi4 if too much swapping occurs biowait() returns an error (B_ERROR) in both cases it seems to come from sdmmc_complete_xs(). I see the following:
sdmmc_complete_xs: write error = 35 sdmmc_complete_xs: read error = 35 c++: B_ERROR after biowait() c++: error 4 from uvmfault_anonget() udata_abort: error 13 sdmmc_complete_xs: read error = 35 c++: B_ERROR after biowait() c++: error 4 from uvmfault_anonget() udata_abort: error 13 And: sdmmc_complete_xs: read error = 60 c++: B_ERROR after biowait() c++: error 4 from uvmfault_anonget() udata_abort: error 13 kettenis@ suggested the kernel thread in the sdmmc stack cannot run because the page daemon is holding the KERNEL_LOCK() which makes the transfers time out...