buf(9s)buf(9s)NAMEbuf - General: Describes arbitrary I/O
SYNOPSIS
──────────────────────────────────
Member Name Data Type
──────────────────────────────────
b_flags int
b_forw struct buf *
b_back struct buf *
av_forw struct buf *
av_back struct buf *
b_bcount int
b_error short
b_dev dev_t
b_un.b_addr caddr_t
b_lblkno daddr_t
b_blkno daddr_t
b_resid int
b_iodone void (*b_iodone) ()
b_proc struct proc *
──────────────────────────────────
MEMBERS
Specifies binary status flags. These flags indicate how a request is to
be handled and the current status of the request. The following flags
are applicable to kernel modules that are device drivers: B_READ,
B_DONE, B_ERROR, B_BUSY, and B_PHYS. See the DESCRIPTION section for
more information on these flags. Specifies a hash chain. Only the
entity (driver, buffer cache) that owns the buf structure can use or
reference this member. A driver receiving a buf structure from the buf‐
fer cache through the strategy routine must not use this member. Spec‐
ifies a hash chain. Only the entity (driver, buffer cache) that owns
the buf structure can use or reference this member. A driver receiving
a buf structure from the buffer cache through the strategy routine must
not use this member. Specifies the position on the free list if the
b_flags member is not set to B_BUSY. Specifies the position on the
free list if the b_flags member is not set to B_BUSY. Specifies the
size of the requested transfer (in bytes). Specifies that an error
occurred on this data transfer. This member is set to an error code if
the b_flags member bit was set. Specifies the special device to which
the transfer is directed. Specifies the address at which to pull or
push the data. Specifies the logical block number. Specifies the
block number on the partition of a disk or on the file system. Speci‐
fies (in bytes) the data not transferred because of some error. Speci‐
fies the routine called by iodone. The device driver calls iodone at
the completion of an I/O operation. Specifies a pointer to the proc
structure that represents the process performing the I/O.
DESCRIPTION
The buf data structure describes arbitrary I/O, but is usually associ‐
ated with block I/O and physio. A systemwide pool of buf data struc‐
tures exists for block I/O; however, many kernel modules that are
device drivers also include locally defined buf data structures.
Kernel modules can use the following flags with the b_flags member:
This flag is set if the operation is read and cleared if the operation
is write. This flag is cleared when a request is passed to a driver
strategy routine. The writer must call iodone to mark a buffer as com‐
pleted. This flag specifies that an error occurred on this data trans‐
fer. Kernel modules set this flag if an error occurs. This flag indi‐
cates that the buffer is in use. This flag indicates that the associ‐
ated data is in user address space.
NOTES
The operating system does not define a B_CALL flag. The iodone rou‐
tine checks the b_iodone member to determine if you specified a comple‐
tion routine. If so, iodone clears b_iodone and then calls the speci‐
fied completion routine. If you want to reuse this buf data structure,
you must reset the b_iodone member to a completion routine. In fact, it
is good programming practice to reset all of the referenced members of
a buf data structure that you plan to reuse.
FILESbuf(9s)