DISKSORT(9F) Kernel Functions for Drivers DISKSORT(9F)

NAME


disksort - single direction elevator seek sort for buffers

SYNOPSIS


#include <sys/conf.h>
#include <sys/ddi.h>
#include <sys/sunddi.h>
void

disksort(struct diskhd *dp, struct buf *bp);


INTERFACE LEVEL


illumos DDI specific (illumos DDI).

PARAMETERS


dp
A pointer to a diskhd structure. A diskhd structure is
essentially identical to head of a buffer structure (see
buf(9S)). The only defined items of interest for this structure
are the av_forw and av_back structure elements which are used
to maintain the front and tail pointers of the forward linked
I/O request queue.


bp
A pointer to a buffer structure. Typically this is the I/O
request that the driver receives in its strategy routine (see
strategy(9E)). The driver is responsible for initializing the
b_resid structure element to a meaningful sort key value prior
to calling disksort().


DESCRIPTION


The function disksort() sorts a pointer to a buffer into a single
forward linked list headed by the av_forw element of the argument
*dp.


It uses a one-way elevator algorithm that sorts buffers into the
queue in ascending order based upon a key value held in the argument
buffer structure element b_resid.


This value can either be the driver calculated cylinder number for
the I/O request described by the buffer argument, or simply the
absolute logical block for the I/O request, depending on how fine
grained the sort is desired to be or how applicable either quantity
is to the device in question.


The head of the linked list is found by use of the av_forw structure
element of the argument *dp. The tail of the linked list is found by
use of the av_back structure element of the argument *dp. The av_forw
element of the *bp argument is used by disksort() to maintain the
forward linkage. The value at the head of the list presumably
indicates the currently active disk area.

CONTEXT


This function can be called from user, interrupt, or kernel context.

SEE ALSO


strategy(9E), buf(9S)


Writing Device Drivers

WARNINGS


The disksort() function does no locking. Therefore, any locking is
completely the responsibility of the caller.

January 16, 2006 DISKSORT(9F)

tribblix@gmail.com :: GitHub :: Privacy