#include <sys/types.h> #include <sys/buf.h> #include <sys/uio.h> #include <sys/aio_req.h> #include <sys/ddi.h> #include <sys/sunddi.h>
int aphysio(int (*strat)(struct buf *), int (*cancel)(struct buf *), dev_t dev, int rw, void (*mincnt)(struct buf *), struct aio_req *aio_reqp);
Solaris DDI specific (Solaris DDI ).
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.