|STRATEGY(9E)||Driver Entry Points||STRATEGY(9E)|
#include <sys/types.h> #include <sys/buf.h> #include <sys/ddi.h> #include <sys/sunddi.h> int prefixstrategy(struct buf *bp);
Architecture independent level 1 (DDI/DKI). This entry point is required for block devices.
The strategy() routine is called indirectly (through cb_ops(9S)) by the kernel to read and write blocks of data on the block device. strategy() may also be called directly or indirectly to support the raw character interface of a block device (read(9E), write(9E) and ioctl(9E)). The strategy() routine's responsibility is to set up and initiate the transfer.
In general, strategy() should not block. It can, however, perform a kmem_cache_create(9F) with both the KM_PUSHPAGE and KM_SLEEP flags set, which might block, without causing deadlock in low memory situations.
The strategy() function must return 0. On an error condition, it should call bioerror(9F) to set b_flags to the proper error code, and call biodone(9F). Note that a partial transfer is not considered to be an error.
Writing Device Drivers
|November 6, 2003||OmniOS|