biodone man page on IRIX

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



biodone(D3)							   biodone(D3)

NAME
     biodone - release buffer after block I/O and wakeup processes

SYNOPSIS
     #include <sys/types.h>
     #include <sys/buf.h>
     #include <sys/ddi.h>
     void biodone(buf_t *bp);

   Arguments
     bp	       Pointer to the buffer header structure.

DESCRIPTION
     The biodone function is called by the driver to indicate that block I/O
     associated with the buffer header fp is complete, and that it can be
     reused.

   Return Values
     None

USAGE
     biodone is usually called from the driver's strategy(D2) routine or I/O
     completion handler [usually intr(D2)].

     If the driver (or the kernel) had specified an iodone handler by
     initializing the b_iodone field of the buf(D4) structure to the address
     of a function, that function is called with the single argument, bp.
     Then biodone returns.

     If an iodone handler had not been specified, biodone sets the B_DONE flag
     in the b_flags field of the buffer header.	 Then, if the B_ASYNC flag is
     set, the buffer is released back to the system.  If the B_ASYNC flag is
     not set, any processes waiting for the I/O to complete are awakened.

     If the buffer was allocated via getrbuf(D3), the driver must have
     specified an iodone handler.

   Level
     Base or Interrupt.

   Synchronization Constraints
     Does not sleep.

     Driver-defined basic locks, read/write locks, and sleep locks may be held
     across calls to this function.

   Examples
     Generally, the first validation test performed by any block device
     strategy routine is a check to verify the bounds of the I/O request.  If
     a read request is made for one block beyond the limits of the device
     (line 8), it will report an end-of-media condition (line 10).  Otherwise,
     if the request is outside the limits of the device, the routine will

									Page 1

biodone(D3)							   biodone(D3)

     report an error condition (line 12).  In either case, the I/O operation
     is completed by calling biodone (line 14) and the driver returns.

      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	 ramdstrategy(bp)
      5	  struct buf *bp;
      6	 {
      7	  daddr_t blkno = bp->b_blkno;
      8	  if ((blkno < 0) || (blkno >= RAMDNBLK)) {
      9	       if ((blkno == RAMDNBLK) && (bp->b_flags & B_READ)) {
     10		    bp->b_resid = bp->b_bcount;	  /* nothing read */
     11	       } else {
     12		    bioerror(bp, ENXIO);
     13	       }
     14	       biodone(bp);
     15	       return;
     16	  }
	     . . .

     On systems where the function bioerror(D3) is not available, line 12
     could read:

     bp->b_error = ENXIO; bp->b_flags |= B_ERROR;

REFERENCES
     bioerror(D3), biowait(D3), brelse(D3), buf(D4), freerbuf(D3),
     getrbuf(D3), intr(D2), strategy(D2)

									Page 2

[top]

List of man pages available for IRIX

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