biodone man page on SmartOS

Man page or keyword search:  
man Server   16655 pages
apropos Keyword Search (all sections)
Output format
SmartOS logo
[printable version]

BIODONE(9F)							   BIODONE(9F)

NAME
       biodone	-  release buffer after buffer I/O transfer and notify blocked
       threads

SYNOPSIS
       #include <sys/types.h>
       #include <sys/buf.h>

       void biodone(struct buf *bp);

INTERFACE LEVEL
       Architecture independent level 1 (DDI/DKI).

PARAMETERS
       bp
	     Pointer to a buf(9S) structure.

DESCRIPTION
       The biodone() function notifies blocked processes waiting for  the  I/O
       to  complete,  sets the B_DONE flag in the b_flags field of the buf(9S)
       structure,  and	releases  the  buffer  if  the	I/O  is	 asynchronous.
       biodone() is called by either the driver interrupt or strategy(9E) rou‐
       tines when a buffer I/O request is complete.

       The biodone() function provides the capability  to  call	 a  completion
       routine	if bp describes a kernel buffer. The address of the routine is
       specified in the b_iodone field of the buf(9S)  structure.  If  such  a
       routine is specified, biodone() calls it and returns without performing
       any other actions. Otherwise, it performs the steps above.

CONTEXT
       The biodone() function can be called from user,	interrupt,  or	kernel
       context.

EXAMPLES
       Generally,  the	first  validation  test	 performed by any block device
       strategy(9E) routine is a check for  an	end-of-file  (EOF)  condition.
       The  strategy(9E)  routine is responsible for determining an EOF condi‐
       tion when the device is accessed directly. If a read(2) request is made
       for one block beyond the limits of the device (line 10), it will report
       an EOF condition.  Otherwise, if the request is outside the  limits  of
       the  device,  the  routine  will	 report an error condition.  In either
       case, report the I/O operation as complete (line 27).

	  1   #define RAMDNBLK	  1000 /* Number of blocks in RAM disk */
	  2   #define RAMDBSIZ	  512  /* Number of bytes per block */
	  3   char ramdblks[RAMDNBLK][RAMDBSIZ]; /* Array containing RAM disk */
	  4
	  5   static int
	  6   ramdstrategy(struct buf *bp)
	  7   {
	  8	 daddr_t blkno = bp->b_blkno;	 /* get block number */
	  9
	 10	 if ((blkno < 0) || (blkno >= RAMDNBLK)) {
	 11	       /*
	 12		* If requested block is outside RAM disk
	 13		* limits, test for EOF which could result
	 14		* from a direct (physio) request.
	 15		*/
	 16	       if ((blkno == RAMDNBLK) && (bp->b_flags & B_READ)) {
	 17		/*
	 18		 * If read is for block beyond RAM disk
	 19		 * limits, mark EOF condition.
	 20		 */
	 21		 bp->b_resid = bp->b_bcount;  /* compute return value */
	 22
	 23	      } else {	  /* I/O attempt is beyond */
	 24		 bp->b_error = ENXIO;	 /*    limits of RAM disk */
	 25		 bp->b_flags |= B_ERROR; /* return error */
	 26	      }
	 27	      biodone(bp);     /* mark I/O complete (B_DONE) */
	 28		/*
	 29		 * Wake any processes awaiting this I/O
	 30		 * or release buffer for asynchronous
	 31		 * (B_ASYNC) request.
	 32		 */
	 33	      return (0);
	 34	 }
		    ...

SEE ALSO
       read(2), strategy(9E), biowait(9F), ddi_add_intr(9F), delay(9F),	 time‐
       out(9F), untimeout(9F), buf(9S)

       Writing Device Drivers

WARNINGS
       After calling biodone(), bp is no longer available to be referred to by
       the driver. If the driver makes	any  reference	to  bp	after  calling
       biodone(), a panic may result.

NOTES
       Drivers that use the b_iodone field of the buf(9S) structure to specify
       a substitute completion routine	should	save  the  value  of  b_iodone
       before  changing	 it,  and  then	 restore  the old value before calling
       biodone() to release the buffer.

				 Jan 16, 2006			   BIODONE(9F)
[top]

List of man pages available for SmartOS

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net