Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ biodone(D3) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought






       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.





                           Copyright 1994 Novell, Inc.               Page 1













      biodone(D3)                                              biodone(D3)


            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 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)

      NOTICES
         Portability
            All processors



                          Copyright 1994 Novell, Inc.               Page 2













       biodone(D3)                                              biodone(D3)


          Applicability
             ddi: 1, 2, 3, 4, 5, 5mp, 6, 6mp, 7, 7mp














































                           Copyright 1994 Novell, Inc.               Page 3








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026