FreeBSD/sys/geom/part/g_part.c
/*-
 * This start routine is only called for non-trivial requests, all the
 * trivial ones are handled autonomously by the slice code.
 * For requests we handle here, we must call the g_io_deliver() on the
 * bio, and return non-zero to indicate to the slice code that we did so.
 * This code executes in the "DOWN" I/O path, this means:
 *    * No sleeping.
 *    * Don't grab the topology lock.
 *    * Don't call biowait, g_getattr(), g_setattr() or g_read_data()
 */
This start routine is only called for non-trivial requests, all the
trivial ones are handled autonomously by the slice code.
For requests we handle here, we must call the g_io_deliver() on the
bio, and return non-zero to indicate to the slice code that we did so.
This code executes in the "DOWN" I/O path, this means:
No sleeping.
Don't grab the topology lock.
This start routine is only called for non - trivial requests all the trivial ones are handled autonomously by the slice code . For requests we handle here we must call the g_io_deliver () on the bio and return non - zero to indicate to the slice code that we did so . This code executes in the " DOWN " I / O path this means : No sleeping . Don ' t grab the topology lock .
static int
g_part_ioctl(struct g_provider *pp, u_long cmd, void *data, int fflag, struct thread *td)
{
	struct g_part_table *table;
	table = pp->geom->softc;
	return G_PART_IOCTL(table, pp, cmd, data, fflag, td);
}
static int g_part_ioctl ( struct g_provider * pp , u_long cmd , void * data , int fflag , struct thread * td ) { struct g_part_table * table ; table = pp -> geom -> softc ; return G_PART_IOCTL ( table , pp , cmd , data , fflag , td ) ; }
This start routine is only called for non-trivial requests, all the
 trivial ones are handled autonomously by the slice code.
This start routine is only called for non - trivial requests all the trivial ones are handled autonomously by the slice code .