summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/bufq.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/bufq.9')
-rw-r--r--static/netbsd/man9/bufq.9238
1 files changed, 238 insertions, 0 deletions
diff --git a/static/netbsd/man9/bufq.9 b/static/netbsd/man9/bufq.9
new file mode 100644
index 00000000..80f62e7f
--- /dev/null
+++ b/static/netbsd/man9/bufq.9
@@ -0,0 +1,238 @@
+.\" $NetBSD: bufq.9,v 1.22 2016/11/18 08:29:43 wiz Exp $
+.\"
+.\" Copyright (c) 2002 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Juergen Hannken-Illjes.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd November 17, 2016
+.Dt BUFQ 9
+.Os
+.Sh NAME
+.Nm bufq ,
+.Nm bufq_init ,
+.Nm bufq_register ,
+.Nm bufq_unregister ,
+.Nm bufq_state ,
+.Nm bufq_alloc ,
+.Nm bufq_drain ,
+.Nm bufq_free ,
+.Nm bufq_getstrategyname ,
+.Nm bufq_move ,
+.Nm bufq_put ,
+.Nm bufq_get ,
+.Nm bufq_peek ,
+.Nm bufq_cancel
+.Nd device buffer queues
+.Sh SYNOPSIS
+.In sys/bufq.h
+.Ft void
+.Fn bufq_init "void"
+.Ft int
+.Fn bufq_register "struct bufq_strat *"
+.Ft int
+.Fn bufq_unregister "struct bufq_strat *"
+.Ft int
+.Fn bufq_alloc "struct bufq_state **bufq" "const char *strategy" "int flags"
+.Ft void
+.Fn bufq_drain "struct bufq_state *bufq"
+.Ft void
+.Fn bufq_free "struct bufq_state *bufq"
+.Ft "const char *"
+.Fn bufq_getstrategyname "struct bufq_state *bufq"
+.Ft void
+.Fn bufq_move "struct bufq_state *dst" "struct bufq_state *src"
+.Ft void
+.Fn bufq_put "struct bufq_state *bufq" "struct buf *bp"
+.Ft "struct buf *"
+.Fn bufq_get "struct bufq_state *bufq"
+.Ft "struct buf *"
+.Fn bufq_peek "struct bufq_state *bufq"
+.Ft "struct buf *"
+.Fn bufq_cancel "struct bufq_state *bufq" "struct buf *bp"
+.Sh DESCRIPTION
+The
+.Nm
+subsystem is a set of operations for the management of device buffer queues.
+Various strategies for ordering of entries in the buffer queues can be
+provided by loadable kernel modules (see
+.Xr module 9 ) .
+By default, the
+.Dv BUFQ_FCFS
+and
+.Dv BUFQ_DISKSORT
+strategies are included in
+the kernel; see
+.Xr options 4
+for more details.
+.Pp
+The primary data type for using the operations is the
+.Em bufq_state
+structure, which is opaque for users.
+Each buffer queue strategy module is defined by the
+.Em bufq_strat
+structure, which is also opaque for users.
+.Sh FUNCTIONS
+.Bl -tag -width compact
+.It Fn bufq_init "void"
+Initialize the
+.Nm
+subsystem.
+This routine must be called before any other
+.Nm
+routines.
+.It Fn bufq_register "bs"
+Registers the specified buffer queue strategy module so it can be used
+in subsequent operations.
+.It Fn bufq_unregister "bs"
+Unregisters the specified buffer queue strategy module.
+The routine will fail if any buffer queues for the specified strategy
+are in use (see
+.Fn bufq_alloc
+below).
+.It Fn bufq_alloc "bufq" "strategy" "flags"
+Allocate and initialize a
+.Em bufq_state
+descriptor.
+.Pp
+The argument
+.Fa strategy
+specifies a buffer queue strategy to be used for this buffer queue.
+The following special values can be used:
+.Pp
+.Bl -tag -offset indent -width BUFQ_DISK_DEFAULT_STRAT -compact
+.It Dv BUFQ_STRAT_ANY
+Let
+.Fn bufq_alloc
+select a strategy.
+.It Dv BUFQ_DISK_DEFAULT_STRAT
+Let
+.Fn bufq_alloc
+select a strategy, assuming it will be used for a normal disk device.
+.El
+.Pp
+Valid bits for the
+.Fa flags
+are:
+.Pp
+.Bl -tag -offset indent -width BUFQ_SORT_RAWBLOCK -compact
+.It Dv BUFQ_SORT_RAWBLOCK
+sort by
+.Em b_rawblkno
+.It Dv BUFQ_SORT_CYLINDER
+sort by
+.Em b_cylinder
+and then by
+.Em b_rawblkno
+.It Dv BUFQ_EXACT
+Fail if a strategy specified by
+.Fa strategy
+is not available.
+In that case,
+.Fa bufq_alloc
+returns
+.Dv ENOENT .
+If this flag is not specified,
+.Fn bufq_alloc
+will silently use one of available strategies.
+.El
+.Pp
+If a specific strategy is specified but not currently available, the
+.Nm bufq
+subsystem will attempt to auto-load the corresponding kernel module using
+.Xr module_autoload 9 .
+.It Fn bufq_drain "bufq"
+Drain a
+.Em bufq_state
+descriptor.
+.It Fn bufq_free "bufq"
+Destroy a
+.Em bufq_state
+descriptor.
+.It Fn bufq_getstrategyname "bufq"
+Get a strategy identifier of a buffer queue, the
+string returned will be NUL-terminated and it always
+will be a valid strategy name.
+.It Fn bufq_move "dst" "src"
+Move all requests from the buffer queue
+.Fa src
+to the buffer queue
+.Fa dst .
+.It Fn bufq_put "bufq" "bp"
+Put the buf
+.Fa bp
+in the queue.
+.It Fn bufq_get "bufq"
+Get the next buf from the queue and remove it from the queue.
+Returns
+.Dv NULL
+if the queue is empty.
+.It Fn bufq_peek "bufq"
+Get the next buf from the queue without removal.
+The next buf will remain the same until
+.Fn bufq_get ,
+.Fn bufq_put ,
+or
+.Fn bufq_drain
+is called.
+Returns
+.Dv NULL
+if the queue is empty.
+.It Fn bufq_cancel "bufq" "bp"
+Cancel the buf
+.Fa bp
+issued earlier on the queue.
+Returns
+.Dv NULL
+if the element can not be found on the queue or
+.Fa bp
+if it has been found and removed.
+This operation can be computationally expensive if there are
+a lot of buffers queued.
+.El
+.Sh CODE REFERENCES
+The actual code implementing the device buffer queues can be found
+in the file
+.Pa sys/kern/subr_bufq.c .
+The code implementing specific buffer queue strategies can be found in
+the files
+.Pa sys/kern/bufq_*.c .
+.Sh NOTES
+A list of currently available buffer queue strategies is available via
+the
+.Dq kern.bufq.strategies
+.Xr sysctl 7
+variables.
+.Sh HISTORY
+The
+.Nm
+subsystem appeared in
+.Nx 2.0 .
+.Sh AUTHORS
+The
+.Nm
+subsystem was written by
+.An J\(:urgen Hannken-Illjes
+.Aq hannken@NetBSD.org .