Remove the requirement that calls to vn_strategy() be limited to the
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 20 Jul 2007 17:21:54 +0000 (17:21 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 20 Jul 2007 17:21:54 +0000 (17:21 +0000)
commitc34665cee2f0b89fad1b7677c9a885e94a455339
tree17c4e4067b2ccc0355028aba7c752d4c1b22b054
parent9c553cf83d79f36f40768e4bba81743c02c89f0e
Remove the requirement that calls to vn_strategy() be limited to the
DMA capabilities of the underlying device.  In particular this fixes issues
with NATA which does not break up large requests when operating on hardware
with limited DMA capabilities.  The old ATA driver did break up requests.

vn_strategy() -> spec_strategy().  spec_strategy(), which converts vnode
strategy calls to device strategy calls, now checks the maximum DMA
capability of the device and breaks up large requests to fit.

Old IDE hardware often can't even transfer a whole 64KB of data and there
are many subsystems in the kernel which assume that >= 64KB can be transfered
in a single I/O.   Subsystems include: The pageout code, the buffer clustering
code, AIO, and the swapin/swapout code.

Reported-by: YONETANI Tomokazu <qhwt+dfly@les.ath.cx>
sys/kern/subr_diskgpt.c
sys/kern/subr_disklabel64.c
sys/kern/vfs_aio.c
sys/vfs/specfs/spec_vnops.c
sys/vm/vm_swap.c