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

FreeBSD Manual Pages

  
 
  

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

NAME
       physio -- initiate I/O on raw devices

SYNOPSIS
       #include	<sys/param.h>
       #include	<sys/systm.h>
       #include	<sys/bio.h>
       #include	<sys/buf.h>

       int
       physio(struct cdev *dev,	struct uio *uio, int ioflag);

DESCRIPTION
       The  physio()  is a helper function typically called from character de-
       vice read() and write() routines	to start I/O on	a user process buffer.
       The maximum amount of data to transfer with each	call is	determined  by
       dev->si_iosize_max.   The physio() call converts	the I/O	request	into a
       strategy()  request  and	 passes	 the  new  request  to	the   driver's
       strategy() routine for processing.

       Since  uio  normally  describes user space addresses, physio() needs to
       lock those pages	into memory.  This is done by  calling	vmapbuf()  for
       the  appropriate	 pages.	  physio() always awaits the completion	of the
       entire requested	transfer before	returning, unless an  error  condition
       is detected earlier.

       A break-down of the arguments follows:

       dev     The device number identifying the device	to interact with.

       uio     The description of the entire transfer as requested by the user
	       process.	  Currently,  the  results  of passing a uio structure
	       with the	uio_segflg set to anything  other  than	 UIO_USERSPACE
	       are undefined.

       ioflag  The ioflag argument from	the read() or write() function calling
	       physio().

RETURN VALUES
       If  successful  physio()	 returns 0.  EFAULT is returned	if the address
       range described by uio is not accessible	 by  the  requesting  process.
       physio()	 will  return  any  error  resulting  from calls to the	device
       strategy	routine, by examining the B_ERROR buffer flag and the  b_error
       field.	Note  that the actual transfer size may	be less	than requested
       by uio if the device signals an "end of file" condition.

SEE ALSO
       read(2),	write(2)

HISTORY
       The physio manual page is originally from NetBSD	with minor changes for
       applicability with FreeBSD.

       The physio call has been	completely re-written for providing higher I/O
       and paging performance.

FreeBSD	14.3		       January 19, 2012			     PHYSIO(9)

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

home | help