summaryrefslogtreecommitdiffstats
path: root/share/man/man9/g_geom.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_geom.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_geom.9')
-rw-r--r--share/man/man9/g_geom.9202
1 files changed, 202 insertions, 0 deletions
diff --git a/share/man/man9/g_geom.9 b/share/man/man9/g_geom.9
new file mode 100644
index 0000000..febc55b
--- /dev/null
+++ b/share/man/man9/g_geom.9
@@ -0,0 +1,202 @@
+.\"
+.\" 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_geom 9
+.Os
+.Sh NAME
+.Nm g_new_geomf ,
+.Nm g_destroy_geom
+.Nd "geom management"
+.Sh SYNOPSIS
+.In geom/geom.h
+.Ft "struct g_geom *"
+.Fn g_new_geomf "struct g_class *mp" "const char *fmt" ...
+.Ft void
+.Fn g_destroy_geom "struct g_geom *gp"
+.Sh DESCRIPTION
+The geom (do not confuse
+.Dq geom
+with
+.Dq GEOM )
+is an instance of a GEOM class.
+For example: in a typical i386 FreeBSD system, there will be one geom
+of class MBR for each disk.
+The geom's name is not really important, it is only used in the XML
+dump and for debugging purposes.
+There can be many geoms with the same name.
+.Pp
+The
+.Fn g_new_geomf
+function creates a new geom, which will be an instance of the class
+.Fa mp .
+The geom name is created in a printf\-like way from the rest of the arguments.
+.Pp
+The
+.Fn g_destroy_geom
+function destroys the given geom imediately and cancels all related pending
+events.
+.Pp
+Structure
+.Vt g_geom
+contains fields, that should be set by the caller after geom creation, but before
+creating any providers or consumers related to this geom (not all are required):
+.Bl -inset -offset indent
+.It Vt "g_start_t *" Va start
+Pointer to a function used for I/O processing.
+.It Vt "g_spoiled_t *" Va spoiled
+Pointer to a function used for consumers spoiling.
+.It Vt "g_dumpconf_t *" Va dumpconf
+Pointer to a function used for configuration in XML format dumping.
+.It Vt "g_access_t *" Va access
+Pointer to a function used for access control.
+.It Vt "g_orphan_t *" Va orphan
+Pointer to a function used to inform about orphaned consumer.
+.It Vt "g_ioctl_t *" Va ioctl
+Pointer to a function used for handling ioctl requests.
+.It Vt "void *" Va softc
+Field for private use.
+.El
+.Sh RESTRICTIONS/CONDITIONS
+If you intend to use providers in this geom you must set field
+.Va start
+of your geom.
+.Pp
+If you are planning to use consumers in your geom you must set fields
+.Va orphan
+and
+.Va access
+for it.
+.Pp
+.Fn g_new_geomf :
+.Bl -item -offset indent
+.It
+Class
+.Fa mp
+must be valid (registered in GEOM).
+.It
+The topology lock has to be held.
+.El
+.Pp
+.Fn g_destroy_geom :
+.Bl -item -offset indent
+.It
+The geom can not posses any providers.
+.It
+The geom can not posses any consumers.
+.It
+The topology lock has to be held.
+.El
+.Sh RETURN VALUES
+.Fn g_new_geomf
+returns a pointer to the newly created geom or
+.Dv NULL
+if an error occured.
+.Sh EXAMPLES
+Create an example geom.
+.Bd -literal -offset indent
+static struct geom *
+g_example_start(struct bio *bp)
+{
+
+ [...]
+}
+
+static void
+g_example_orphan(struct g_consumer *cp)
+{
+
+ g_topology_assert();
+
+ [...]
+}
+
+static void
+g_example_spoiled(struct g_consumer *cp)
+{
+
+ g_topology_assert();
+
+ [...]
+}
+
+static void
+g_example_access(struct g_provider *pp, int dr, int dw, int de)
+{
+
+ [...]
+}
+
+static struct g_geom *
+create_example_geom(struct g_class *myclass)
+{
+ struct g_geom *gp;
+
+ g_topology_lock();
+ gp = g_new_geomf(myclass, "example_geom");
+ g_topology_unlock();
+ if (gp != NULL) {
+ gp->start = g_example_start;
+ gp->orphan = g_example_orphan;
+ gp->spoiled = g_example_spoiled;
+ gp->access = g_example_access;
+ gp->softc = NULL;
+ }
+
+ return (gp);
+}
+
+static int
+destroy_example_geom(struct g_geom *gp)
+{
+
+ g_topology_lock();
+ if (!LIST_EMPTY(&gp->provider) ||
+ !LIST_EMPTY(&gp->consumer)) {
+ g_topology_unlock();
+ return (EBUSY);
+ }
+ g_destroy_geom(gp);
+ g_topology_unlock();
+
+ return (0);
+}
+.Ed
+.Sh SEE ALSO
+.Xr DECLARE_GEOM_CLASS 9 ,
+.Xr geom 4 ,
+.Xr g_attach 9 ,
+.Xr g_bio 9 ,
+.Xr g_consumer 9 ,
+.Xr g_data 9 ,
+.Xr g_event 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