Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
G_CONSUMER(9)		   Kernel Developer's Manual		 G_CONSUMER(9)

NAME
       g_new_consumer, g_destroy_consumer -- GEOM consumers management

SYNOPSIS
       #include	<geom/geom.h>

       struct g_consumer *
       g_new_consumer(struct g_geom *gp);

       void
       g_destroy_consumer(struct g_consumer *cp);

DESCRIPTION
       A  GEOM	consumer  is the backdoor through which	a geom connects	to an-
       other GEOM provider and through which I/O requests are sent.

       The g_new_consumer() function creates a new consumer on geom  gp.   Be-
       fore  using  the	new consumer, it has to	be attached to a provider with
       g_attach(9) and opened with g_access(9).

       The g_destroy_consumer()	function destroys the given consumer and  can-
       cels  all  related  pending events.  This function is the last stage of
       killing an unwanted consumer.

RESTRICTIONS/CONDITIONS
       g_new_consumer():

	     The geom gp has to	have an	orphan method defined.

	     The topology lock has to be held.

       g_destroy_consumer():

	     The consumer must not be attached to a provider.

	     The access	count has to be	0.

	     The topology lock has to be held.

RETURN VALUES
       The g_new_consumer() function returns a pointer to  the	newly  created
       consumer.

EXAMPLES
       Create  consumer,  attach  it  to  given	provider, gain read access and
       clean up.

	     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);
	     }

SEE ALSO
       geom(4),	 DECLARE_GEOM_CLASS(9),	 g_access(9),  g_attach(9),  g_bio(9),
       g_data(9), g_event(9), g_geom(9), g_provider(9),	g_provider_by_name(9),
       g_wither_geom(9)

AUTHORS
       This manual page	was written by Pawel Jakub Dawidek <pjd@FreeBSD.org>.

FreeBSD	14.3		       January 16, 2004			 G_CONSUMER(9)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=g_consumer&sektion=9&manpath=FreeBSD+14.3-RELEASE+and+Ports>

home | help