man pages section 9: DDI and DKI Driver Entry Points

Exit Print View

Updated: July 2014



strategy - perform block I/O


#include <sys/types.h>
#include <sys/buf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>

int prefixstrategy(struct buf *bp);

Interface Level

Architecture independent level 1 (DDI/DKI). This entry point is required for block devices.



Pointer to the buf(9S) structure.


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.

Return Values

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.

See also

ioctl(9E), read(9E), write(9E), biodone(9F), bioerror(9F), buf(9S), cb_ops(9S), kmem_cache_create(9F)

Writing Device Drivers for Oracle Solaris 11.2