Windows PowerShell command on Get-command biodone
MyWebUniversity

Manual Pages for UNIX Operating System command usage for man biodone

Kernel Functions for Drivers biodone(9F)

NAME

biodone - release buffer after buffer I/O transfer and

notify blocked threads

SYNOPSIS

#include

#include

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) routines 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 condition 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).

SunOS 5.11 Last change: 16 Jan 2006 1

Kernel Functions for Drivers biodone(9F)

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), timeout(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

SunOS 5.11 Last change: 16 Jan 2006 2

Kernel Functions for Drivers biodone(9F)

value of b_iodone before changing it, and then restore the

old value before calling biodone() to release the buffer.

SunOS 5.11 Last change: 16 Jan 2006 3




Contact us      |      About us      |      Term of use      |       Copyright © 2000-2019 MyWebUniversity.com ™