mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-04 16:49:40 +00:00
146 lines
4.1 KiB
Groff
146 lines
4.1 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
|
|
A 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
|
|
\[en] 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 on given geom
|
|
.Fa gp .
|
|
The name of the provider, which will appear as device in
|
|
.Xr devfs 5 ,
|
|
is created
|
|
in a
|
|
.Xr printf 3 Ns
|
|
-like way from the rest of
|
|
the arguments.
|
|
After creation, the caller has to set the provider's
|
|
.Va mediasize
|
|
and
|
|
.Va sectorsize ,
|
|
as well as other desired initializations, and then call
|
|
.Fn g_error_provider
|
|
to reset the provider's error, which is initially set to
|
|
.Er ENXIO .
|
|
.Pp
|
|
The
|
|
.Fn g_destroy_provider
|
|
function destroys the given provider, cancels all related pending events and
|
|
removes the corresponding devfs entry.
|
|
.Pp
|
|
The
|
|
.Fn g_error_provider
|
|
function is used to set the provider's error value.
|
|
If set to a nonzero, all I/O requests will be denied,
|
|
as well as 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 a programmer error.
|
|
.It
|
|
The geom
|
|
.Fa gp
|
|
has to have a
|
|
.Fa start
|
|
method defined.
|
|
.It
|
|
The topology lock has to be held.
|
|
.El
|
|
.Pp
|
|
.Fn g_destroy_provider :
|
|
.Bl -item -offset indent
|
|
.It
|
|
The provider must not have consumers attached.
|
|
.It
|
|
The access count has to be 0.
|
|
.It
|
|
The topology lock has to be held.
|
|
.El
|
|
.Sh RETURN VALUES
|
|
The
|
|
.Fn g_new_providerf
|
|
function returns a pointer to the newly created provider.
|
|
.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();
|
|
pp->mediasize = 65536;
|
|
pp->sectorsize = 512;
|
|
g_error_provider(pp, 0);
|
|
|
|
return (pp);
|
|
}
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr geom 4 ,
|
|
.Xr DECLARE_GEOM_CLASS 9 ,
|
|
.Xr g_access 9 ,
|
|
.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 .
|