man pages section 9: DDI and DKI Driver Entry Points

Exit Print View

Updated: July 2014
 
 

strategy(9E)

Name

strategy - perform block I/O

Synopsis

#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.

Parameters

bp

Pointer to the buf(9S) structure.

Description

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