Provided by:
kernel-doc-2.4.27_2.4.27-12_all 
NAME
generic_make_request -
SYNOPSIS
void generic_make_request (int rw, struct buffer_head *bh);
ARGUMENTS
rw READ, WRITE, or READA - what sort of I/O is desired.
bh The buffer head describing the location in memory and on
the device.
DESCRIPTION
generic_make_request is used to make I/O requests of block devices. It
is passed a struct buffer_head and a rw value. The READ and WRITE
options are (hopefully) obvious in meaning. The READA value means that
a read is required, but that the driver is free to fail the request if,
for example, it cannot get needed resources immediately.
generic_make_request does not return any status. The success/failure
status of the request, along with notification of completion, is
delivered asynchronously through the bh->b_end_io function described
(one day) else where.
The caller of generic_make_request must make sure that b_page, b_addr,
b_size are set to describe the memory buffer, that b_rdev and b_rsector
are set to describe the device address, and the b_end_io and optionally
b_private are set to describe how completion notification should be
signaled. BH_Mapped should also be set (to confirm that b_dev and
b_blocknr are valid).
generic_make_request and the drivers it calls may use b_reqnext, and
may change b_rdev and b_rsector. So the values of these fields should
NOT be depended on after the call to generic_make_request. Because of
this, the caller should record the device address information in b_dev
and b_blocknr.
Apart from those fields mentioned above, no other fields, and in
particular, no other flags, are changed by generic_make_request or any
lower level drivers.