While looking how to gracefully deprecate a sysctl (to return a hint,
what the new sysctl is called), I found that /sbin/sysctl will call a
SYSCTL_PROC twice for reads, or five times for changing a value.
The 1st and 4th call are to check what buffersize to allocate, before
the actual content is retrieved (and shown).
In tcp_hostcache_list, sbuf was used in a way, which would need
a large (~2MB) blocking allocation of memory (M_WAITOK), which
may not happen for some time on systems having a full hostcache
(>15k entries), and/or kernel memory fragementation (uptime).
Replacing the output there with the ready-made functions which
allocate much less kernel sbuf memory, and repeatedly drain this
to userspace if need be, to prevent any apparent "stuck" sbin/sysctl
calls.
PR: 254333
MFC after: 2 weeks (stable/13, stable/12)