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

FreeBSD Manual Pages

  
 
  

home | help
PHYSIO(9)	       FreeBSD 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 device
     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 unde-
	     fined.

     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 strat-
     egy 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	11.1		       January 19, 2012			  FreeBSD 11.1

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUES | SEE ALSO | HISTORY

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

home | help