ll_rw_block — level access to block devices (DEPRECATED)
void ll_rw_block ( | int | rw, |
int | nr, | |
struct buffer_head * | bhs[]) ; |
rw
whether to READ
or WRITE
or SWRITE
or maybe READA
(readahead)
nr
number of struct buffer_heads in the array
bhs[]
array of pointers to struct buffer_head
ll_rw_block
takes an array of pointers to struct buffer_heads, and
requests an I/O operation on them, either a READ
or a WRITE
. The third
SWRITE
is like WRITE
only we make sure that the *current* data in buffers
are sent to disk. The fourth READA
option is described in the documentation
for generic_make_request
which ll_rw_block
calls.
This function drops any buffer that it cannot get a lock on (with the BH_Lock state bit) unless SWRITE is required, any buffer that appears to be clean when doing a write request, and any buffer that appears to be up-to-date when doing read request. Further it marks as clean buffers that are processed for writing (the buffer cache won't assume that they are actually clean until the buffer gets unlocked).
ll_rw_block sets b_end_io to simple completion handler that marks the buffer up-to-date (if approriate), unlocks the buffer and wakes any waiters.
All of the buffers must be for the same device, and must also be a multiple of the current approved size for the device.