Interface Level

Parameters

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.