Print this page
12062 Convert buf(9S) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man9s/buf.9s.man.txt
          +++ new/usr/src/man/man9s/buf.9s.man.txt
   1    1  BUF(9S)                   Data Structures for Drivers                  BUF(9S)
   2    2  
   3      -
   4      -
   5    3  NAME
   6      -       buf - block I/O data transfer structure
        4 +     buf - block I/O data transfer structure
   7    5  
   8    6  SYNOPSIS
   9      -       #include <sys/ddi.h>
  10      -       #include <sys/sunddi.h>
        7 +     #include <sys/ddi.h>
        8 +     #include <sys/sunddi.h>
  11    9  
  12      -
  13   10  INTERFACE LEVEL
  14      -       Architecture independent level 1 (DDI/DKI)
       11 +     Architecture independent level 1 (DDI/DKI)
  15   12  
  16   13  DESCRIPTION
  17      -       The buf structure is the basic data structure for block I/O transfers.
  18      -       Each block I/O transfer has an associated buffer header. The header
  19      -       contains all the buffer control and status information. For drivers,
  20      -       the buffer header pointer is the sole argument to a block driver
  21      -       strategy(9E) routine. Do not depend on the size of the buf structure
  22      -       when writing a driver.
       14 +     The buf structure is the basic data structure for block I/O transfers.
       15 +     Each block I/O transfer has an associated buffer header.  The header
       16 +     contains all the buffer control and status information.  For drivers, the
       17 +     buffer header pointer is the sole argument to a block driver strategy(9E)
       18 +     routine.  Do not depend on the size of the buf structure when writing a
       19 +     driver.
  23   20  
       21 +     A buffer header can be linked in multiple lists simultaneously.  Because
       22 +     of this, most of the members in the buffer header cannot be changed by
       23 +     the driver, even when the buffer header is in one of the driver's work
       24 +     lists.
  24   25  
  25      -       A buffer header can be linked in multiple lists simultaneously. Because
  26      -       of this, most of the members in the buffer header cannot be changed by
  27      -       the driver, even when the buffer header is in one of the driver's work
  28      -       lists.
       26 +     Buffer headers are also used by the system for unbuffered or physical I/O
       27 +     for block drivers.  In this case, the buffer describes a portion of user
       28 +     data space that is locked into memory.
  29   29  
       30 +     Block drivers often chain block requests so that overall throughput for
       31 +     the device is maximized.  The av_forw and the av_back members of the buf
       32 +     structure can serve as link pointers for chaining block requests.
  30   33  
  31      -       Buffer headers are also used by the system for unbuffered or physical
  32      -       I/O for block drivers. In this case, the buffer describes a portion of
  33      -       user data space that is locked into memory.
  34      -
  35      -
  36      -       Block drivers often chain block requests so that overall throughput for
  37      -       the device is maximized. The av_forw and the av_back members of the buf
  38      -       structure can serve as link pointers for chaining block requests.
  39      -
  40   34  STRUCTURE MEMBERS
  41      -         int           b_flags;           /* Buffer status */
  42      -         struct buf    *av_forw;          /* Driver work list link */
  43      -         struct buf    *av_back;          /* Driver work list link */
  44      -         size_t        b_bcount;          /* # of bytes to transfer */
  45      -         union {
  46      -              caddr_t  b_addr;            /* Buffer's virtual address */
  47      -         } b_un;
  48      -         daddr_t       b_blkno;           /* Block number on device */
  49      -         diskaddr_t    b_lblkno;          /* Expanded block number on dev. */
  50      -         size_t        b_resid;           /* # of bytes not xferred */
  51      -         size_t        b_bufsize;         /* size of alloc. buffer */
  52      -         int           (*b_iodone)(struct buf *); /* function called */
  53      -                                                      /* by biodone */
  54      -         int           b_error;           /* expanded error field */
  55      -         void          *b_private;        /* "opaque" driver private area */
  56      -         dev_t         b_edev;            /* expanded dev field */
       35 +       int           b_flags;           /* Buffer status */
       36 +       struct buf    *av_forw;          /* Driver work list link */
       37 +       struct buf    *av_back;          /* Driver work list link */
       38 +       size_t        b_bcount;          /* # of bytes to transfer */
       39 +       union {
       40 +           caddr_t  b_addr;            /* Buffer's virtual address */
       41 +       } b_un;
       42 +       daddr_t       b_blkno;           /* Block number on device */
       43 +       diskaddr_t    b_lblkno;          /* Expanded block number on dev.  */
       44 +       size_t        b_resid;           /* # of bytes not xferred */
       45 +       size_t        b_bufsize;         /* size of alloc. buffer */
       46 +       int           (*b_iodone)(struct buf *); /* function called */
       47 +                                                /* by biodone */
       48 +       int           b_error;           /* expanded error field */
       49 +       void          *b_private;        /* "opaque" driver private area */
       50 +       dev_t         b_edev;            /* expanded dev field */
  57   51  
       52 +     The members of the buffer header available to test or set by a driver are
       53 +     as follows:
  58   54  
       55 +     b_flags stores the buffer status and indicates to the driver whether to
       56 +     read or write to the device.  The driver must never clear the b_flags
       57 +     member.  If this is done, unpredictable results can occur including loss
       58 +     of disk sanity and the possible failure of other kernel processes.
  59   59  
       60 +     All b_flags bit values not otherwise specified above are reserved by the
       61 +     kernel and may not be used.
  60   62  
  61      -       The members of the buffer header available to test or set by a driver
  62      -       are as follows:
       63 +     Valid flags are as follows:
  63   64  
       65 +     B_BUSY    Indicates the buffer is in use.  The driver must not change
       66 +               this flag unless it allocated the buffer with getrbuf(9F) and
       67 +               no I/O operation is in progress.
  64   68  
  65      -       b_flags stores the buffer status and indicates to the driver whether to
  66      -       read or write to the device. The driver must never clear the b_flags
  67      -       member. If this is done, unpredictable results can occur including loss
  68      -       of disk sanity and the possible failure of other kernel processes.
       69 +     B_DONE    Indicates the data transfer has completed.  This flag is read-
       70 +               only.
  69   71  
       72 +     B_ERROR   Indicates an I/O transfer error.  It is set in conjunction with
       73 +               the b_error field.  bioerror(9F) should be used in preference
       74 +               to setting the B_ERROR bit.
  70   75  
  71      -       All b_flags bit values not otherwise specified above are reserved by
  72      -       the kernel and may not be used.
       76 +     B_PAGEIO  Indicates the buffer is being used in a paged I/O request.  See
       77 +               the description of the b_un.b_addr field for more information.
       78 +               This flag is read-only.
  73   79  
       80 +     B_PHYS    indicates the buffer header is being used for physical (direct)
       81 +               I/O to a user data area.  See the description of the
       82 +               b_un.b_addr field for more information.  This flag is read-
       83 +               only.
  74   84  
  75      -       Valid flags are as follows:
       85 +     B_READ    Indicates that data is to be read from the peripheral device
       86 +               into main memory.
  76   87  
  77      -       B_BUSY
  78      -                    Indicates the buffer is in use. The driver must not change
  79      -                    this flag unless it allocated the buffer with getrbuf(9F)
  80      -                    and no I/O operation is in progress.
       88 +     B_WRITE   Indicates that the data is to be transferred from main memory
       89 +               to the peripheral device.  B_WRITE is a pseudo flag and cannot
       90 +               be directly tested; it is only detected as the NOT form of
       91 +               B_READ.
  81   92  
       93 +     av_forw and av_back can be used by the driver to link the buffer into
       94 +     driver work lists.
  82   95  
  83      -       B_DONE
  84      -                    Indicates the data transfer has completed. This flag is
  85      -                    read-only.
       96 +     b_bcount specifies the number of bytes to be transferred in both a paged
       97 +     and a non-paged I/O request.
  86   98  
       99 +     b_un.b_addr is the virtual address of the I/O request, unless B_PAGEIO is
      100 +     set.  The address is a kernel virtual address, unless B_PHYS is set, in
      101 +     which case it is a user virtual address.  If B_PAGEIO is set, b_un.b_addr
      102 +     contains kernel private data.  Note that either one of B_PHYS and
      103 +     B_PAGEIO, or neither, can be set, but not both.
  87  104  
  88      -       B_ERROR
  89      -                    Indicates an I/O transfer error. It is set in conjunction
  90      -                    with the b_error field. bioerror(9F) should be used in
  91      -                    preference to setting the B_ERROR bit.
      105 +     b_blkno identifies which logical block on the device (the device is
      106 +     defined by the device number) is to be accessed.  The driver might have
      107 +     to convert this logical block number to a physical location such as a
      108 +     cylinder, track, and sector of a disk.  This is a 32-bit value.  The
      109 +     driver should use b_blkno or b_lblkno, but not both.
  92  110  
      111 +     b_lblkno identifies which logical block on the device (the device is
      112 +     defined by the device number) is to be accessed.  The driver might have
      113 +     to convert this logical block number to a physical location such as a
      114 +     cylinder, track, and sector of a disk.  This is a 64-bit value.  The
      115 +     driver should use b_lblkno or b_blkno, but not both.
  93  116  
  94      -       B_PAGEIO
  95      -                    Indicates the buffer is being used in a paged I/O request.
  96      -                    See the description of the b_un.b_addr field for more
  97      -                    information. This flag is read-only.
      117 +     b_resid should be set to the number of bytes not transferred because of
      118 +     an error.
  98  119  
      120 +     b_bufsize contains the size of the allocated buffer.
  99  121  
 100      -       B_PHYS
 101      -                    indicates the buffer header is being used for physical
 102      -                    (direct) I/O to a user data area. See the description of
 103      -                    the b_un.b_addr field for more information. This flag is
 104      -                    read-only.
      122 +     b_iodone identifies a specific biodone(9F) routine to be called by the
      123 +     driver when the I/O is complete.
 105  124  
      125 +     b_error can hold an error code that should be passed as a return code
      126 +     from the driver.  b_error is set in conjunction with the B_ERROR bit set
      127 +     in the b_flags member.  bioerror(9F) should be used in preference to
      128 +     setting the b_error field.
 106  129  
 107      -       B_READ
 108      -                    Indicates that data is to be read from the peripheral
 109      -                    device into main memory.
      130 +     b_private is for the private use of the device driver.
 110  131  
      132 +     b_edev contains the major and minor device numbers of the device
      133 +     accessed.
 111  134  
 112      -       B_WRITE
 113      -                    Indicates that the data is to be transferred from main
 114      -                    memory to the peripheral device. B_WRITE is a pseudo flag
 115      -                    and cannot be directly tested; it is only detected as the
 116      -                    NOT form of B_READ.
 117      -
 118      -
 119      -
 120      -       av_forw and av_back can be used by the driver to link the buffer into
 121      -       driver work lists.
 122      -
 123      -
 124      -       b_bcount specifies the number of bytes to be transferred in both a
 125      -       paged and a non-paged I/O request.
 126      -
 127      -
 128      -       b_un.b_addr is the virtual address of the I/O request, unless B_PAGEIO
 129      -       is set. The address is a kernel virtual address, unless B_PHYS is set,
 130      -       in which case it is a user virtual address. If B_PAGEIO is set,
 131      -       b_un.b_addr contains kernel private data. Note that either one of
 132      -       B_PHYS and B_PAGEIO, or neither, can be set, but not both.
 133      -
 134      -
 135      -       b_blkno identifies which logical block on the device (the device is
 136      -       defined by the device number) is to be accessed. The driver might have
 137      -       to convert this logical block number to a physical location such as a
 138      -       cylinder, track, and sector of a disk. This is a 32-bit value. The
 139      -       driver should use b_blkno or b_lblkno, but not both.
 140      -
 141      -
 142      -       b_lblkno identifies which logical block on the device (the device is
 143      -       defined by the device number) is to be accessed. The driver might have
 144      -       to convert this logical block number to a physical location such as a
 145      -       cylinder, track, and sector of a disk. This is a 64-bit value. The
 146      -       driver should use b_lblkno or b_blkno, but not both.
 147      -
 148      -
 149      -       b_resid should be set to the number of bytes not transferred because of
 150      -       an error.
 151      -
 152      -
 153      -       b_bufsize contains the size of the allocated buffer.
 154      -
 155      -
 156      -       b_iodone identifies a specific biodone routine to be called by the
 157      -       driver when the I/O is complete.
 158      -
 159      -
 160      -       b_error can hold an error code that should be passed as a return code
 161      -       from the driver. b_error is set in conjunction with the B_ERROR bit set
 162      -       in the b_flags member. bioerror(9F) should be used in preference to
 163      -       setting the b_error field.
 164      -
 165      -
 166      -       b_private is for the private use of the device driver.
 167      -
 168      -
 169      -       b_edev contains the major and minor device numbers of the device
 170      -       accessed.
 171      -
 172  135  SEE ALSO
 173      -       strategy(9E), aphysio(9F), bioclone(9F), biodone(9F), bioerror(9F),
 174      -       bioinit(9F), clrbuf(9F), getrbuf(9F), physio(9F), iovec(9S), uio(9S)
      136 +     strategy(9E), aphysio(9F), bioclone(9F), biodone(9F), bioerror(9F),
      137 +     bioinit(9F), clrbuf(9F), getrbuf(9F), physio(9F), iovec(9S), uio(9S)
 175  138  
      139 +     Writing Device Drivers.
 176  140  
 177      -       Writing Device Drivers
 178      -
 179  141  WARNINGS
 180      -       Buffers are a shared resource within the kernel. Drivers should read or
 181      -       write only the members listed in this section. Drivers that attempt to
 182      -       use undocumented members of the buf structure risk corrupting data in
 183      -       the kernel or on the device.
      142 +     Buffers are a shared resource within the kernel.  Drivers should read or
      143 +     write only the members listed in this section.  Drivers that attempt to
      144 +     use undocumented members of the buf structure risk corrupting data in the
      145 +     kernel or on the device.
 184  146  
 185      -
 186      -
 187      -                              September 19, 2002                       BUF(9S)
      147 +illumos                          July 9, 2018                          illumos
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX