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 ap-
     propriate pages.  physio()	always awaits the completion of	the entire re-
     quested 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	13.0		       January 19, 2012			  FreeBSD 13.0

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

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

home | help