145 lines
4.2 KiB
Groff
145 lines
4.2 KiB
Groff
|
.\"
|
||
|
.\" 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_provider 9
|
||
|
.Os
|
||
|
.Sh NAME
|
||
|
.Nm g_new_providerf ,
|
||
|
.Nm g_destroy_provider ,
|
||
|
.Nm g_error_provider
|
||
|
.Nd "GEOM providers management"
|
||
|
.Sh SYNOPSIS
|
||
|
.In geom/geom.h
|
||
|
.Ft "struct g_provider *"
|
||
|
.Fn g_new_providerf "struct g_geom *gp" "const char *fmt" ...
|
||
|
.Ft void
|
||
|
.Fn g_destroy_provider "struct g_provider *pp"
|
||
|
.Ft void
|
||
|
.Fn g_error_provider "struct g_provider *pp" "int error"
|
||
|
.Sh DESCRIPTION
|
||
|
The GEOM provider is the front gate at which a geom offers service.
|
||
|
A provider is
|
||
|
.Dq a disk\-like thing which appears in Pa /dev
|
||
|
\- a logical disk in other words.
|
||
|
All providers have three main properties: name, sectorsize and size.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn g_new_providerf
|
||
|
function creates a new provider and attaches it to geom
|
||
|
.Fa gp .
|
||
|
The provider name is created in a printf\-like way from the rest of
|
||
|
the arguments.
|
||
|
After creation, the provider is unusable, because
|
||
|
.Fn g_new_providerf
|
||
|
sets its error to
|
||
|
.Er ENXIO .
|
||
|
The function
|
||
|
.Fn g_error_provider
|
||
|
should be used to reset this error, but before it is called, two
|
||
|
fields should be set in the provider structure:
|
||
|
.Va mediasize
|
||
|
and
|
||
|
.Va sectorsize
|
||
|
as well as other initialization things should be done first.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn g_destroy_provider
|
||
|
function destroys the given provider, cancels all related pending events and
|
||
|
removes corresponding devfs entry.
|
||
|
.Pp
|
||
|
The
|
||
|
.Fn g_error_provider
|
||
|
function is used to set a provider error value.
|
||
|
If it set to a nonzero value, all I/O requests will be denied,
|
||
|
increasing its access count will not be possible (error
|
||
|
.Fa error
|
||
|
will be returned).
|
||
|
.Sh RESTRICTIONS/CONDITIONS
|
||
|
.Fn g_new_provider :
|
||
|
.Bl -item -offset indent
|
||
|
.It
|
||
|
The provider name should be unique, but this is not enforced by GEOM.
|
||
|
If the name is not unique, one will end up with two (or more) files
|
||
|
with the same name, which is programmer error.
|
||
|
.It
|
||
|
The geom related to the created provider must have
|
||
|
.Fa start
|
||
|
field defined.
|
||
|
.It
|
||
|
The topology lock has to be held.
|
||
|
.El
|
||
|
.Pp
|
||
|
.Fn g_destroy_provider :
|
||
|
.Bl -item -offset indent
|
||
|
.It
|
||
|
No consumers have to be attached.
|
||
|
.It
|
||
|
The access count has to be 0.
|
||
|
.It
|
||
|
The topology lock has to be held.
|
||
|
.El
|
||
|
.Sh RETURN VALUES
|
||
|
.Fn g_new_providerf
|
||
|
returns a pointer to the newly created provider or
|
||
|
.Dv NULL
|
||
|
if an error occured.
|
||
|
.Sh EXAMPLES
|
||
|
Create an example provider, set its parameters and make it usable.
|
||
|
.Bd -literal -offset indent
|
||
|
struct g_provider *
|
||
|
create_example_provider(struct g_geom *gp)
|
||
|
{
|
||
|
struct g_provider *pp;
|
||
|
|
||
|
g_topology_lock();
|
||
|
pp = g_new_providerf(gp, "example_provider");
|
||
|
g_topology_unlock();
|
||
|
if (pp != NULL) {
|
||
|
pp->mediasize = 65536;
|
||
|
pp->sectorsize = 512;
|
||
|
g_error_provider(pp, 0);
|
||
|
}
|
||
|
|
||
|
return (pp);
|
||
|
}
|
||
|
.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_geom 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 .
|