kernel - split the pbuf subsystem into two (kva and non-kva)
authorMatthew Dillon <dillon@apollo.backplane.com>
Sun, 15 Aug 2010 18:57:53 +0000 (11:57 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sun, 15 Aug 2010 18:57:53 +0000 (11:57 -0700)
commit9a82e536c033562735802be193d648f04ed8bf6d
tree24d7e47f39b3dab2f00c13bd08102d376b51b3b6
parentc98abe57bfd218907c4a69bad6686b318bc8f5dc
kernel - split the pbuf subsystem into two (kva and non-kva)

Most pbufs do not require kva reservations.  Split the API to provide
pbufs without kva reservations out of a much larger pool of pbufs, fixing
deadlock issues with the DM subsystem.

Note in particular that the hammer reblocker can eat upwards of 5000 pbufs
when operating on multi-layered DM-based storage, which blows away the
256 pbufs normally available with kva reservations that the old API had.

* Getpbuf() / trypbuf() now return pbufs without KVA reservations.

* Add getpbuf_kva() and trypbuf_kva() to get pbufs with KVA reservations.

* Fixes pbuf deadlocks in the low level I/O subsystem, particularly DM
  crypt, stripe, and mirror.
sys/bus/cam/cam_periph.c
sys/kern/kern_dsched.c
sys/kern/kern_physio.c
sys/kern/vfs_aio.c
sys/kern/vfs_bio.c
sys/kern/vfs_cluster.c
sys/sys/buf.h
sys/vfs/ufs/ffs_rawread.c
sys/vm/swap_pager.c
sys/vm/vm_pager.c