pbuf(9)
NAME
- pbuf, getpbuf, trypbuf, relpbuf - functions for managing
- physical buffers
SYNOPSIS
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bio.h>
#include <sys/buf.h>
struct buf *
getpbuf(int *pfreecnt);
struct buf *
trypbuf(int *pfreecnt);
void
relpbuf(struct buf *bp, int *pfreecnt);
DESCRIPTION
- These functions are used to allocate and release physical
- buffers.
- The physical buffers are allocated at system startup and are
- maintained
in a separate pool from the main system buffers. They are
- intended for
use by subsystems that cannot or should not be reliant on
- the main pool
of buffers (for example the swap pager). The system allo
- cates between 16
and 256 physical buffers depending on the amount of memory
- in the system.
- Each subsystem that allocates buffers via these calls is ex
- pected to manage its own percentage free counter. If the value is ini
- tialized to -1
the number of buffers available to the subsystem is limited
- only by the
number of physical buffers available. The number of buffers
- is stored in
nswbuf which is defined in #include <sys/buf.h>
and initialized in cpu_startup(). A recommended initializa
- tion value is
1/2 nswbuf.
- The getpbuf() function returns the first available buffer to
- the user.
If there are no buffers available, getpbuf() will sleep
- waiting for one
to become available. If pfreecnt is zero, getpbuf() will
- sleep until it
increases. pfreecnt is decremented prior to returning.
- The trypbuf() function returns the first available buffer.
- If there are
no buffers available, NULL is returned. As well, if
- pfreecnt is zero,
NULL is returned. pfreecnt is decremented prior to return
- ing a valid
buffer. If NULL is returned, pfreecnt is not modified.
- The relpbuf() function releases the buffer back to the free
- list. If the
buffers b_rcred or b_wcred structures are not NULL, they are
- freed. See
crfree(9).
- pfreecnt is incremented prior to returning.
RETURN VALUES
- getpbuf() and trypbuf() return a pointer to the buffer. In
- the case of
trypbuf(), NULL can also be returned indicating that there
- are no buffers
available.
AUTHORS
- This manual page was written by Chad David <davidc@ac
- ns.ab.ca>.
- BSD July 9, 2001