summaryrefslogtreecommitdiffstats
path: root/share/man/man9/g_attach.9
diff options
context:
space:
mode:
Diffstat (limited to 'share/man/man9/g_attach.9')
-rw-r--r--share/man/man9/g_attach.9141
1 files changed, 141 insertions, 0 deletions
diff --git a/share/man/man9/g_attach.9 b/share/man/man9/g_attach.9
new file mode 100644
index 0000000..c5cdf5a
--- /dev/null
+++ b/share/man/man9/g_attach.9
@@ -0,0 +1,141 @@
+.\"
+.\" 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_ATTACH 9
+.Os
+.Sh NAME
+.Nm g_attach ,
+.Nm g_detach
+.Nd "attach/detach GEOM consumers to/from providers"
+.Sh SYNOPSIS
+.In geom/geom.h
+.Ft int
+.Fn g_attach "struct g_consumer *cp" "struct g_provider *pp"
+.Ft void
+.Fn g_detach "struct g_consumer *cp"
+.Sh DESCRIPTION
+The
+.Fn g_attach
+function attaches given consumer
+.Fa cp
+to given provider
+.Fa pp ,
+thus establishing a communication channel between the consumer and the
+provider that allows to change access counts and perform I/O operations.
+.Pp
+The
+.Fn g_detach
+function detaches given consumer
+.Fa cp
+from its corresponding provider, tearing down the communication channel
+between them.
+.Sh RESTRICTIONS/CONDITIONS
+.Fn g_attach :
+.Bl -item -offset indent
+.It
+The consumer must not be attached to a provider.
+.It
+The operation must not create a topology loop.
+.It
+The topology lock has to be held.
+.El
+.Pp
+.Fn g_detach :
+.Bl -item -offset indent
+.It
+The consumer has to be attached.
+.It
+The access count has to be 0.
+.It
+There must be no active requests.
+.It
+The topology lock has to be held.
+.El
+.Sh RETURN VALUES
+The
+.Fn g_attach
+function returns 0 if successful; otherwise an error code is returned.
+.Sh EXAMPLES
+Create a consumer, attach it to a given provider, gain read access and clean up.
+.Bd -literal -offset indent
+void
+some_function(struct g_geom *mygeom, struct g_provider *pp)
+{
+ struct g_consumer *cp;
+
+ g_topology_assert();
+
+ /* Create new consumer on 'mygeom' geom. */
+ cp = g_new_consumer(mygeom);
+ /* Attach newly created consumer to given provider. */
+ if (g_attach(cp, pp) != 0) {
+ g_destroy_consumer(cp);
+ return;
+ }
+ /* Open provider for reading through our consumer. */
+ if (g_access(cp, 1, 0, 0) != 0) {
+ g_detach(cp);
+ g_destroy_consumer(cp);
+ return;
+ }
+
+ g_topology_unlock();
+ /*
+ * Read data from provider.
+ */
+ g_topology_lock();
+
+ /* Disconnect from provider (release access count). */
+ g_access(cp, -1, 0, 0);
+ /* Detach from provider. */
+ g_detach(cp);
+ /* Destroy consumer. */
+ g_destroy_consumer(cp);
+}
+.Ed
+.Sh ERRORS
+Possible errors:
+.Bl -tag -width Er
+.It Bq Er ELOOP
+The operation creates a topology loop.
+.El
+.Sh SEE ALSO
+.Xr geom 4 ,
+.Xr DECLARE_GEOM_CLASS 9 ,
+.Xr g_access 9 ,
+.Xr g_bio 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 Mt pjd@FreeBSD.org .
OpenPOWER on IntegriCloud