summaryrefslogtreecommitdiffstats
path: root/share/man/man9/g_bio.9
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2004-02-11 10:06:18 +0000
committerpjd <pjd@FreeBSD.org>2004-02-11 10:06:18 +0000
commitdbc7255199dc5592095e7b60e310c520a91641bb (patch)
tree343cd26c39251e0b38b336e71722a99c8b1510da /share/man/man9/g_bio.9
parentd2298f1b5c0d5a034a5957fc6dd651a04fb8626f (diff)
downloadFreeBSD-src-dbc7255199dc5592095e7b60e310c520a91641bb.zip
FreeBSD-src-dbc7255199dc5592095e7b60e310c520a91641bb.tar.gz
Added first part of GEOM kernel API manuals pages.
Documented function and macros are: - DECLARE_GEOM_CLASS(), - g_attach(), - g_detach(), - g_new_bio(), - g_clone_bio(), - g_destroy_bio(), - g_new_consumer(), - g_destroy_consumer(), - g_read_data(), - g_write_data(), - g_post_event(), - g_waitfor_event(), - g_cancel_event(), - g_new_geomf(), - g_destroy_geom(), - g_new_providerf(), - g_destroy_provider(), - g_error_provider(), - g_provider_by_name(), - g_wither_geom(). and more to come. I want to thanks following people for help with those documents: Slawek Zak <zaks@prioris.mini.pw.edu.pl> Simon L. Nielsen <simon@FreeBSD.org> Pieter de Boer <g.p.de.boer@st.hanze.nl> and of course Poul-Henning Kamp <phk@FreeBSD.org> Reviewed by: phk, scottl Approved by: phk, scottl (mentor)
Diffstat (limited to 'share/man/man9/g_bio.9')
-rw-r--r--share/man/man9/g_bio.9224
1 files changed, 224 insertions, 0 deletions
diff --git a/share/man/man9/g_bio.9 b/share/man/man9/g_bio.9
new file mode 100644
index 0000000..d602665
--- /dev/null
+++ b/share/man/man9/g_bio.9
@@ -0,0 +1,224 @@
+.\"
+.\" Copyright (c) 2004 Pawel Jakub Dawidek <pjd@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" 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 DEVELOPERS ``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 DEVELOPERS 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd January 16, 2004
+.Dt g_bio 9
+.Os
+.Sh NAME
+.Nm g_new_bio ,
+.Nm g_clone_bio ,
+.Nm g_destroy_bio
+.Nd "bio controlling functions"
+.Sh SYNOPSIS
+.In sys/bio.h
+.In geom/geom.h
+.Ft "struct bio *"
+.Fn g_new_bio void
+.Ft "struct bio *"
+.Fn g_clone_bio "struct bio *bp"
+.Ft void
+.Fn g_destroy_bio "struct bio *bp"
+.Sh DESCRIPTION
+The
+.Fa bio
+structure is used by GEOM to describe I/O requests.
+Most important fields of
+.Fa struct bio
+are described below:
+.Bl -tag -width ".Va bio_attribute"
+.It Va bio_cmd
+I/O request number.
+There are four I/O requests available in GEOM:
+.Bl -tag -width BIO_GETATTR
+.It Dv BIO_READ
+Self explanatory.
+.It Dv BIO_WRITE
+Self explanatory.
+.It Dv BIO_DELETE
+Delete indicates that a certain range of data is no longer used and that
+it can be erased or freed as the underlying technology supports.
+Technologies like flash adaptation layers can arrange to erase the relevant
+blocks before they will become reassigned and cryptographic devices may
+want to fill random bits into the range to reduce the amount of data
+available for attack.
+.It Dv BIO_GETATTR
+Get attribute supports inspection and manipulation of out\-of\-band
+attributes on a particular provider or path.
+Attributes are named by ascii strings and are stored in the
+.Va bio_attribute
+field.
+.El
+.It Va bio_offset
+Offset into provider.
+.It Va bio_data
+Pointer to data buffer.
+.It Va bio_flags
+Available flags:
+.Bl -tag -width BIO_GETATTR
+.It Dv BIO_ERROR
+Request failed (error value is stored in
+.Va bio_error )
+field.
+.It Dv BIO_DONE
+Request finished.
+.It Dv BIO_FLAG1
+Avaliable for private use.
+.It Dv BIO_FLAG2
+Avaliable for private use.
+.El
+.It Va bio_error
+Error value when BIO_ERROR is set.
+.It Va bio_done
+Pointer to function which will be called on request finish.
+.It Va bio_driver1
+Private use by the callee (ie: the provider).
+.It Va bio_driver2
+Private use by the callee (ie: the provider).
+.It Va bio_caller1
+Private use by the caller (ie: the consumer).
+.It Va bio_caller2
+Private use by the caller (ie: the consumer).
+.It Va bio_attribute
+Attribute string for BIO_GETATTR request.
+.It Va bio_from
+Consumer to use for request (attached to provider stored in
+.Va bio_to
+field) (typically read\-only for a class).
+.It Va bio_to
+Destination provider (typically read\-only for a class).
+.It Va bio_length
+Request length in bytes.
+.It Va bio_completed
+Number of bytes completed, but they may not be completed from
+the front of the request.
+.It Va bio_children
+Number of bio clones (typically read\-only for a class).
+.It Va bio_inbed
+Number of finished bio clones.
+.It Va bio_parent
+Pointer to parent bio.
+.El
+.Pp
+The
+.Fn g_new_bio
+function allocates a new, empty
+.Vt bio
+structure.
+.Pp
+The
+.Fn g_clone_bio
+function allocates a new
+.Vt bio
+structure and copies those fields from the
+.Vt bio
+structure given as an argument to clone:
+.Va bio_cmd ,
+.Va bio_length ,
+.Va bio_offset ,
+.Va bio_data ,
+.Va bio_attribute .
+The field
+.Va bio_parent
+in clone is set to source
+.Vt bio
+and the field
+.Va bio_children
+in parent is increased.
+.Pp
+This function should be used for every request which enters through
+the provider of a particular geom and needs to be scheduled down.
+Proper order is:
+.Pp
+.Bl -enum -compact
+.It
+Clone
+.Vt "struct bio" .
+.It
+Modify the clone.
+.It
+Schedule the clone on its own consumer.
+.El
+.Pp
+The
+.Fn g_destroy_bio
+function kills the given
+.Vt bio
+structure.
+.Sh EXAMPLES
+Implementation of
+.Dq Dv NULL Ns \-transformation ,
+meaning that an I/O request is cloned and scheduled down without any
+modifications.
+Let's assume that field
+.Va ex_consumer
+in structure
+.Vt example_softc
+contains a consumer attached to the provider we want to operate on.
+.Bd -literal -offset indent
+void
+example_start(struct bio *bp)
+{
+ struct example_softc *sc;
+ struct bio *cbp;
+
+ sc = bp->bio_to->geom->softc;
+ if (sc == NULL) {
+ g_io_deliver(bp, ENXIO);
+ return;
+ }
+
+ /* Let's clone our bio request. */
+ cbp = g_clone_bio(bp);
+ if (cbp == NULL) {
+ g_io_deliver(bp, ENOMEM);
+ return;
+ }
+ cbp->bio_done = g_std_done; /* Standard 'done' function. */
+
+ /* Ok, schedule it down. */
+ /*
+ * The consumer can be obtained from
+ * LIST_FIRST(&bp->bio_to->geom->consumers) as well,
+ * if there is only one in our geom.
+ */
+ g_io_request(cbp, sc->ex_consumer);
+}
+.Ed
+.Sh SEE ALSO
+.Xr DECLARE_GEOM_CLASS 9 ,
+.Xr geom 4 ,
+.Xr g_attach 9 ,
+.Xr g_consumer 9 ,
+.Xr g_data 9 ,
+.Xr g_event 9 ,
+.Xr g_geom 9 ,
+.Xr g_provider 9 ,
+.Xr g_provider_by_name 9 ,
+.Xr g_wither_geom 9
+.Sh AUTHORS
+.An -nosplit
+This manual page was written by
+.An Pawel Jakub Dawidek Aq pjd@FreeBSD.org .
OpenPOWER on IntegriCloud