aphysio() performs asynchronous I/O operations between the device and the address space described
by aio_reqp->aio_uio.
Prior to the start of the transfer, aphysio()
verifies the requested operation is valid. It then locks the pages involved
in the I/O transfer so they can not be
paged out. The device strategy routine, strat,
is then called one or more times to perform the physical I/O operations. aphysio() does not wait for
each transfer to complete, but returns as soon as the necessary requests
have been made.
aphysio() calls mincnt
to bound the maximum transfer unit size to a sensible default for the device
and the system. Drivers which do not provide their own local mincnt routine should call aphysio() with
minphys(9F). minphys(9F)
is the system mincnt routine. minphys(9F)
ensures the transfer size does not exceed any system limits.
If a driver supplies a local mincnt routine,
this routine should perform the following actions:
- If bp->b_bcount exceeds a
device limit, set bp->b_bcount to a value
supported by the device.
- Call minphys(9F)
to ensure that the driver does not circumvent additional system limits.
|