Print this page
10527 Convert mhd(7I) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/mhd.7i.man.txt
          +++ new/usr/src/man/man7i/mhd.7i.man.txt
   1    1  MHD(7I)                         Ioctl Requests                         MHD(7I)
   2    2  
   3      -
   4      -
   5    3  NAME
   6      -       mhd - multihost disk control operations
        4 +     mhd - multihost disk control operations
   7    5  
   8    6  SYNOPSIS
   9      -       #include <sys/mhd.h>
        7 +     #include <sys/mhd.h>
  10    8  
  11      -
  12    9  DESCRIPTION
  13      -       The  mhd ioctl(2) control access rights of a multihost disk, using disk
  14      -       reservations on the disk device.
       10 +     The mhd ioctl(2) control access rights of a multihost disk, using disk
       11 +     reservations on the disk device.
  15   12  
       13 +     The stability level of this interface (see attributes(5)) is evolving.
       14 +     As a result, the interface is subject to change and you should limit your
       15 +     use of it.
  16   16  
  17      -       The stability level of this interface (see attributes(5)) is evolving.
  18      -       As a result, the interface is subject to change and you should limit
  19      -       your use of it.
       17 +     The mhd ioctls fall into two major categories: (1) ioctls for non-shared
       18 +     multihost disks and (2) ioctls for shared multihost disks.
  20   19  
       20 +     One ioctl, MHIOCENFAILFAST, is applicable to both non-shared and shared
       21 +     multihost disks.  It is described after the first two categories.
  21   22  
  22      -       The mhd ioctls fall into two major categories: (1) ioctls for non-
  23      -       shared multihost disks and (2)  ioctls for shared multihost disks.
       23 +     All the ioctls require root privilege.
  24   24  
       25 +     For all of the ioctls, the caller should obtain the file descriptor for
       26 +     the device by calling open(2) with the O_NDELAY flag; without the
       27 +     O_NDELAY flag, the open may fail due to another host already having a
       28 +     conflicting reservation on the device.  Some of the ioctls below permit
       29 +     the caller to forcibly clear a conflicting reservation held by another
       30 +     host, however, in order to call the ioctl, the caller must first obtain
       31 +     the open file descriptor.
  25   32  
  26      -       One ioctl, MHIOCENFAILFAST, is applicable to both non-shared and shared
  27      -       multihost disks.  It is described after the first two categories.
  28      -
  29      -
  30      -       All the ioctls require root privilege.
  31      -
  32      -
  33      -       For all of the ioctls, the caller should obtain the file descriptor for
  34      -       the device by calling  open(2) with the O_NDELAY flag; without the
  35      -       O_NDELAY flag, the open may fail due to another host already having a
  36      -       conflicting reservation on the device. Some of the ioctls below permit
  37      -       the caller to forcibly clear a conflicting reservation held by another
  38      -       host, however, in order to call the ioctl, the caller must first obtain
  39      -       the open file descriptor.
  40      -
  41   33     Non-shared multihost disks
  42      -       Non-shared multihost disks ioctls consist of MHIOCTKOWN, MHIOCRELEASE,
  43      -       HIOCSTATUS, and MHIOCQRESERVE. These ioctl requests control the access
  44      -       rights of non-shared multihost disks. A non-shared multihost disk is
  45      -       one that supports serialized, mutually exclusive I/O mastery by the
  46      -       connected hosts. This is in contrast to the shared-disk model, in which
  47      -       concurrent access is allowed from more than one host (see below).
       34 +     Non-shared multihost disks ioctls consist of MHIOCTKOWN, MHIOCRELEASE,
       35 +     HIOCSTATUS, and MHIOCQRESERVE.  These ioctl requests control the access
       36 +     rights of non-shared multihost disks.  A non-shared multihost disk is one
       37 +     that supports serialized, mutually exclusive I/O mastery by the connected
       38 +     hosts.  This is in contrast to the shared-disk model, in which concurrent
       39 +     access is allowed from more than one host (see below).
  48   40  
       41 +     A non-shared multihost disk can be in one of two states:
  49   42  
  50      -       A non-shared multihost disk can be in one of two states:
       43 +     o       Exclusive access state, where only one connected host has I/O
       44 +             access
  51   45  
  52      -           o      Exclusive access state, where only one connected host has
  53      -                  I/O access
       46 +     o       Non-exclusive access state, where all connected hosts have I/O
       47 +             access.  An external hardware reset can cause the disk to enter
       48 +             the non-exclusive access state.
  54   49  
  55      -           o      Non-exclusive access state, where all connected hosts have
  56      -                  I/O access. An external hardware reset can cause the disk to
  57      -                  enter the non-exclusive access state.
       50 +     Each multihost disk driver views the machine on which it's running as the
       51 +     "local host"; each views all other machines as "remote hosts".  For each
       52 +     I/O or ioctl request, the requesting host is the local host.
  58   53  
       54 +     Note that the non-shared ioctls are designed to work with SCSI-2 disks.
       55 +     The SCSI-2 RESERVE/RELEASE command set is the underlying hardware
       56 +     facility in the device that supports the non-shared ioctls.
  59   57  
  60      -       Each multihost disk driver views the machine on which it's running as
  61      -       the "local host"; each views all other machines as "remote hosts".  For
  62      -       each I/O or ioctl request, the requesting host is the local host.
       58 +     The function prototypes for the non-shared ioctls are:
  63   59  
       60 +       ioctl(fd, MHIOCTKOWN);
       61 +       ioctl(fd, MHIOCRELEASE);
       62 +       ioctl(fd, MHIOCSTATUS);
       63 +       ioctl(fd, MHIOCQRESERVE);
  64   64  
  65      -       Note that the non-shared ioctls are designed to work with SCSI-2 disks.
  66      -       The SCSI-2 RESERVE/RELEASE command set is the underlying hardware
  67      -       facility in the device that supports the non-shared ioctls.
       65 +     MHIOCTKOWN     Forcefully acquires exclusive access rights to the
       66 +                    multihost disk for the local host.  Revokes all access
       67 +                    rights to the multihost disk from remote hosts.  Causes
       68 +                    the disk to enter the exclusive access state.
  68   69  
       70 +                    Implementation Note: Reservations (exclusive access
       71 +                    rights) broken via random resets should be reinstated by
       72 +                    the driver upon their detection, for example, in the
       73 +                    automatic probe function described below.
  69   74  
  70      -       The function prototypes for the non-shared ioctls are:
       75 +     MHIOCRELEASE   Relinquishes exclusive access rights to the multihost disk
       76 +                    for the local host.  On success, causes the disk to enter
       77 +                    the non- exclusive access state.
  71   78  
  72      -         ioctl(fd, MHIOCTKOWN);
  73      -         ioctl(fd, MHIOCRELEASE);
  74      -         ioctl(fd, MHIOCSTATUS);
  75      -         ioctl(fd, MHIOCQRESERVE);
       79 +     MHIOCSTATUS    Probes a multihost disk to determine whether the local
       80 +                    host has access rights to the disk.  Returns 0 if the
       81 +                    local host has access to the disk, 1 if it doesn't, and -1
       82 +                    with errno set to EIO if the probe failed for some other
       83 +                    reason.
  76   84  
       85 +     MHIOCQRESERVE  Issues, simply and only, a SCSI-2 Reserve command.  If the
       86 +                    attempt to reserve fails due to the SCSI error Reservation
       87 +                    Conflict (which implies that some other host has the
       88 +                    device reserved), then the ioctl will return -1 with errno
       89 +                    set to EACCES.  The MHIOCQRESERVE ioctl does NOT issue a
       90 +                    bus device reset or bus reset prior to attempting the
       91 +                    SCSI-2 reserve command.  It also does not take care of re-
       92 +                    instating reservations that disappear due to bus resets or
       93 +                    bus device resets; if that behavior is desired, then the
       94 +                    caller can call MHIOCTKOWN after the MHIOCQRESERVE has
       95 +                    returned success.  If the device does not support the
       96 +                    SCSI-2 Reserve command, then the ioctl returns -1 with
       97 +                    errno set to ENOTSUP.  The MHIOCQRESERVE ioctl is intended
       98 +                    to be used by high-availability or clustering software for
       99 +                    a "quorum" disk, hence, the "Q" in the name of the ioctl.
  77  100  
  78      -       MHIOCTKOWN
  79      -                         Forcefully acquires exclusive access rights to the
  80      -                         multihost disk for the local host. Revokes all access
  81      -                         rights to the multihost disk from remote hosts.
  82      -                         Causes the disk to enter the exclusive access state.
  83      -
  84      -                         Implementation Note: Reservations (exclusive access
  85      -                         rights) broken via random resets should be reinstated
  86      -                         by the driver upon their detection, for example, in
  87      -                         the automatic probe function described below.
  88      -
  89      -
  90      -       MHIOCRELEASE
  91      -                         Relinquishes exclusive access rights to the multihost
  92      -                         disk for the local host.  On success, causes the disk
  93      -                         to enter the  non- exclusive access state.
  94      -
  95      -
  96      -       MHIOCSTATUS
  97      -                         Probes a multihost disk to determine whether the
  98      -                         local host has access rights to the disk. Returns  0
  99      -                         if the local host has access to the disk, 1 if it
 100      -                         doesn't, and -1 with errno set to  EIO if the probe
 101      -                         failed for some other reason.
 102      -
 103      -
 104      -       MHIOCQRESERVE
 105      -                         Issues, simply and only, a SCSI-2 Reserve command. If
 106      -                         the attempt to reserve fails due to the SCSI error
 107      -                         Reservation Conflict (which implies that some other
 108      -                         host has the device reserved), then the ioctl will
 109      -                         return  -1 with errno set to  EACCES. The
 110      -                         MHIOCQRESERVE ioctl does NOT issue a bus device reset
 111      -                         or bus reset prior to attempting the SCSI-2 reserve
 112      -                         command.  It also does not take care of re-instating
 113      -                         reservations that disappear due to bus resets or bus
 114      -                         device resets; if that behavior is desired, then the
 115      -                         caller can call MHIOCTKOWN after the MHIOCQRESERVE
 116      -                         has returned success.  If the device does not support
 117      -                         the SCSI-2 Reserve command, then the ioctl returns -1
 118      -                         with  errno set to ENOTSUP. The MHIOCQRESERVE ioctl
 119      -                         is intended to be used by high-availability or
 120      -                         clustering software for a "quorum" disk, hence, the
 121      -                         "Q" in the name of the ioctl.
 122      -
 123      -
 124  101     Shared Multihost Disks
 125      -       Shared multihost disks ioctls control access to shared multihost disks.
 126      -       The ioctls are merely a veneer on the SCSI-3 Persistent Reservation
 127      -       facility.  Therefore, the underlying semantic model is not described in
 128      -       detail here, see instead the SCSI-3 standard. The SCSI-3 Persistent
 129      -       Reservations support the concept of a group of hosts all sharing access
 130      -       to a disk.
      102 +     Shared multihost disks ioctls control access to shared multihost disks.
      103 +     The ioctls are merely a veneer on the SCSI-3 Persistent Reservation
      104 +     facility.  Therefore, the underlying semantic model is not described in
      105 +     detail here, see instead the SCSI-3 standard.  The SCSI-3 Persistent
      106 +     Reservations support the concept of a group of hosts all sharing access
      107 +     to a disk.
 131  108  
      109 +     The function prototypes and descriptions for the shared multihost ioctls
      110 +     are as follows:
 132  111  
 133      -       The function prototypes and descriptions for the shared multihost
 134      -       ioctls are as follows:
      112 +     ioctl(fd, MHIOCGRP_INKEYS, (mhioc_inkeys_t *)k)
 135  113  
 136      -       ioctl(fd, MHIOCGRP_INKEYS, (mhioc_inkeys_t) *k);
      114 +        Issues the SCSI-3 command Persistent Reserve In Read Keys to the
      115 +        device.  On input, the field k->li should be initialized by the caller
      116 +        with k->li.listsize reflecting how big of an array the caller has
      117 +        allocated for the k->lilist field and with `k->li.listlen == 0'.  On
      118 +        return, the field k->li.listlen is updated to indicate the number of
      119 +        reservation keys the device currently has: if this value is larger
      120 +        than k->li.listsize then that indicates that the caller should have
      121 +        passed a bigger k->li.list array with a bigger k->li.listsize.  The
      122 +        number of array elements actually written by the callee into
      123 +        k->li.list is the minimum of k->li.listlen and k->li.listsize.  The
      124 +        field k->generation is updated with the generation information
      125 +        returned by the SCSI-3 Read Keys query.  If the device does not
      126 +        support SCSI-3 Persistent Reservations, then this ioctl returns -1
      127 +        with errno set to ENOTSUP.
 137  128  
 138      -           Issues the SCSI-3 command Persistent Reserve In Read Keys to the
 139      -           device.  On input, the field k->li should be initialized by the
 140      -           caller with k->li.listsize reflecting how big of an array the
 141      -           caller has allocated for the k->li.list field and with
 142      -           k->li.listlen == 0. On return, the field k->li.listlen is updated
 143      -           to indicate the number of reservation keys the device currently
 144      -           has: if this value is larger than k->li.listsize then that
 145      -           indicates that the caller should have passed a bigger k->li.list
 146      -           array with a bigger k->li.listsize. The number of array elements
 147      -           actually written by the callee into k->li.list is the minimum of
 148      -           k->li.listlen and k->li.listsize. The field k->generation is
 149      -           updated with the generation information returned by the SCSI-3 Read
 150      -           Keys query. If the device does not support SCSI-3 Persistent
 151      -           Reservations, then this ioctl returns -1 with errno set to
 152      -           ENOTSUP.
      129 +     ioctl(fd, MHIOCGRP_INRESV, (mhioc_inresvs_t *)r)
 153  130  
      131 +        Issues the SCSI-3 command Persistent Reserve In Read Reservations to
      132 +        the device.  Remarks similar to MHIOCGRP_INKEYS apply to the array
      133 +        manipulation.  If the device does not support SCSI-3 Persistent
      134 +        Reservations, then this ioctl returns -1 with errno set to ENOTSUP.
 154  135  
 155      -       ioctl(fd, MHIOCGRP_INRESV, (mhioc_inresvs_t) *r);
      136 +     ioctl(fd, MHIOCGRP_REGISTER, (mhioc_register_t *)r)
 156  137  
 157      -           Issues the SCSI-3 command Persistent Reserve In Read Reservations
 158      -           to the device. Remarks similar to MHIOCGRP_INKEYS apply to the
 159      -           array manipulation.  If the device does not support SCSI-3
 160      -           Persistent Reservations, then this ioctl returns -1 with errno set
 161      -           to ENOTSUP.
      138 +        Issues the SCSI-3 command Persistent Reserve Out Register.  The fields
      139 +        of structure r are all inputs; none of the fields are modified by the
      140 +        ioctl.  The field r->aptpl should be set to true to specify that
      141 +        registrations and reservations should persist across device power
      142 +        failures, or to false to specify that registrations and reservations
      143 +        should be cleared upon device power failure; true is the recommended
      144 +        setting.  The field r->oldkey is the key that the caller believes the
      145 +        device may already have for this host initiator; if the caller
      146 +        believes that that this host initiator is not already registered with
      147 +        this device, it should pass the special key of all zeros.  To achieve
      148 +        the effect of unregistering with the device, the caller should pass
      149 +        its current key for the r->oldkey field and an r->newkey field
      150 +        containing the special key of all zeros.  If the device returns the
      151 +        SCSI error code Reservation Conflict, this ioctl returns -1 with errno
      152 +        set to EACCES.
 162  153  
      154 +     ioctl(fd, MHIOCGRP_RESERVE, (mhioc_resv_desc_t *)r)
 163  155  
 164      -       ioctl(fd, MHIOCGRP_REGISTER, (mhioc_register_t) *r);
      156 +        Issues the SCSI-3 command Persistent Reserve Out Reserve.  The fields
      157 +        of structure r are all inputs; none of the fields are modified by the
      158 +        ioctl.  If the device returns the SCSI error code Reservation
      159 +        Conflict, this ioctl returns -1 with errno set to EACCES.
 165  160  
 166      -           Issues the SCSI-3 command Persistent Reserve Out Register. The
 167      -           fields of structure r are all inputs; none of the fields are
 168      -           modified by the ioctl.  The field r->aptpl should be set to true to
 169      -           specify that  registrations and reservations should persist across
 170      -           device power failures, or to false to specify that registrations
 171      -           and reservations should be cleared upon device power failure; true
 172      -           is the recommended setting. The field r->oldkey is the key that the
 173      -           caller believes the device may already have for this host
 174      -           initiator; if the caller believes that that this host initiator is
 175      -           not already registered with this device, it should pass the special
 176      -           key of all zeros.  To achieve the effect of unregistering with the
 177      -           device, the caller should pass its current key for the r->oldkey
 178      -           field and an r->newkey field containing the special key of all
 179      -           zeros.  If the device returns the SCSI error code Reservation
 180      -           Conflict, this ioctl returns -1 with errno set to EACCES.
      161 +     ioctl(fd, MHIOCGRP_PREEMPTANDABORT, (mhioc_preemptandabort_t *)r)
 181  162  
      163 +        Issues the SCSI-3 command Persistent Reserve Out Preempt-And-Abort.
      164 +        The fields of structure r are all inputs; none of the fields are
      165 +        modified by the ioctl.  The key of the victim host is specified by the
      166 +        field r->victim_key.  The field r->resvdesc supplies the preempter's
      167 +        key and the reservation that it is requesting as part of the SCSI-3
      168 +        Preempt-And-Abort command.  If the device returns the SCSI error code
      169 +        Reservation Conflict, this ioctl returns -1 with errno set to EACCES.
 182  170  
 183      -       ioctl(fd, MHIOCGRP_RESERVE, (mhioc_resv_desc_t) *r);
      171 +     ioctl(fd, MHIOCGRP_PREEMPT, (mhioc_preemptandabort_t *)r)
 184  172  
 185      -           Issues the SCSI-3 command Persistent Reserve Out Reserve. The
 186      -           fields of structure r are all inputs; none of the fields are
 187      -           modified by the ioctl.  If the device returns the SCSI error code
 188      -           Reservation Conflict, this ioctl returns -1 with errno set to
 189      -           EACCES.
      173 +        Similar to MHIOCGRP_PREEMPTANDABORT, but instead issues the SCSI-3
      174 +        command Persistent Reserve Out Preempt.  (Note: This command is not
      175 +        implemented).
 190  176  
      177 +     ioctl(fd, MHIOCGRP_CLEAR, (mhioc_resv_key_t *)r)
      178 +        Issues the SCSI-3 command Persistent Reserve Out Clear.  The input
      179 +        parameter r is the reservation key of the caller, which should have
      180 +        been already registered with the device, by an earlier call to
      181 +        MHIOCGRP_REGISTER.
 191  182  
 192      -       ioctl(fd, MHIOCGRP_PREEMPTANDABORT, (mhioc_preemptandabort_t) *r);
      183 +     For each device, the non-shared ioctls should not be mixed with the
      184 +     Persistent Reserve Out shared ioctls, and vice-versa,  otherwise, the
      185 +     underlying device is likely to return errors, because SCSI does not
      186 +     permit SCSI-2 reservations to be mixed with SCSI-3 reservations on a
      187 +     single device.  It is, however, legitimate to call the Persistent Reserve
      188 +     In ioctls, because these are query only.  Issuing the MHIOCGRP_INKEYS
      189 +     ioctl is the recommended way for a caller to determine if the device
      190 +     supports SCSI-3 Persistent Reservations (the ioctl will return -1 with
      191 +     errno set to ENOTSUP if the device does not).
 193  192  
 194      -           Issues the SCSI-3 command Persistent Reserve Out Preempt-And-Abort.
 195      -           The fields of structure r are all inputs; none of the fields are
 196      -           modified by the ioctl. The key of the victim host is specified by
 197      -           the field r->victim_key. The field r->resvdesc supplies the
 198      -           preempter's key and the reservation that it is requesting as part
 199      -           of the SCSI-3 Preempt-And-Abort command.  If the device returns the
 200      -           SCSI error code Reservation Conflict, this ioctl returns -1 with
 201      -           errno set to EACCES.
 202      -
 203      -
 204      -       ioctl(fd, MHIOCGRP_PREEMPT, (mhioc_preemptandabort_t) *r);
 205      -
 206      -           Similar to MHIOCGRP_PREEMPTANDABORT, but instead issues the SCSI-3
 207      -           command Persistent Reserve Out Preempt. (Note: This command is not
 208      -           implemented).
 209      -
 210      -
 211      -       ioctl(fd, MHIOCGRP_CLEAR, (mhioc_resv_key_t) *r);
 212      -
 213      -           Issues the SCSI-3 command Persistent Reserve Out Clear. The input
 214      -           parameter r is the reservation key of the caller, which should have
 215      -           been already registered with the device, by an earlier call to
 216      -           MHIOCGRP_REGISTER.
 217      -
 218      -
 219      -
 220      -       For each device, the non-shared ioctls should not be mixed with the
 221      -       Persistent Reserve Out shared ioctls, and vice-versa,  otherwise, the
 222      -       underlying device is likely to return errors, because SCSI does not
 223      -       permit SCSI-2 reservations to be mixed with SCSI-3 reservations on a
 224      -       single device. It is, however, legitimate to call the Persistent
 225      -       Reserve In ioctls, because these are query only.  Issuing the
 226      -       MHIOCGRP_INKEYS ioctl  is the recommended way for a caller to determine
 227      -       if the device  supports SCSI-3 Persistent Reservations (the ioctl will
 228      -       return -1 with  errno set to  ENOTSUP if the device does not).
 229      -
 230  193     MHIOCENFAILFAST Ioctl
 231      -       The MHIOCENFAILFAST ioctl is applicable for both non-shared and shared
 232      -       disks, and may be used with either the non-shared or shared ioctls.
      194 +     The MHIOCENFAILFAST ioctl is applicable for both non-shared and shared
      195 +     disks, and may be used with either the non-shared or shared ioctls.
 233  196  
 234      -       ioctl(fd, MHIOENFAILFAST, (unsigned int *) millisecs);
      197 +     ioctl(fd, MHIOENFAILFAST, (unsigned int *)millisecs)
 235  198  
 236      -           Enables or disables the failfast option in the multihost disk
 237      -           driver and enables or disables automatic probing of a multihost
 238      -           disk, described below.  The argument is an unsigned integer
 239      -           specifying the number of milliseconds to wait between executions of
 240      -           the automatic probe function.  An argument of zero disables the
 241      -           failfast option and disables automatic probing.  If the
 242      -           MHIOCENFAILFAST ioctl is never called, the effect is defined to be
 243      -           that both the failfast option and automatic probing are disabled.
      199 +        Enables or disables the failfast option in the multihost disk driver
      200 +        and enables or disables automatic probing of a multihost disk,
      201 +        described below.  The argument is an unsigned integer specifying the
      202 +        number of milliseconds to wait between executions of the automatic
      203 +        probe function.  An argument of zero disables the failfast option and
      204 +        disables automatic probing.  If the MHIOCENFAILFAST ioctl is never
      205 +        called, the effect is defined to be that both the failfast option and
      206 +        automatic probing are disabled.
 244  207  
 245      -
 246  208     Automatic Probing
 247      -       The MHIOCENFAILFAST ioctl sets up a timeout in the driver to
 248      -       periodically schedule automatic probes of  the  disk. The automatic
 249      -       probe function works in this manner: The driver is scheduled  to probe
 250      -       the multihost disk every n milliseconds, rounded up to the next
 251      -       integral multiple of the system  clock's resolution. If
      209 +     The MHIOCENFAILFAST ioctl sets up a timeout in the driver to periodically
      210 +     schedule automatic probes of the disk.  The automatic probe function
      211 +     works in this manner: The driver is scheduled to probe the multihost disk
      212 +     every n milliseconds, rounded up to the next integral multiple of the
      213 +     system clock's resolution.  If
 252  214  
 253      -           1.     the local host no longer has access  rights  to  the
 254      -                  multihost disk, and
      215 +           1.   the local host no longer has access rights to the multihost
      216 +                disk, and
 255  217  
 256      -           2.     access rights were expected to be held by the  local host,
      218 +           2.   access rights were expected to be held by the local host,
 257  219  
      220 +     the driver immediately panics the machine to comply with the failfast
      221 +     model.
 258  222  
 259      -       the driver immediately panics the machine to comply with the failfast
 260      -       model.
      223 +     If the driver makes this discovery outside the timeout function,
      224 +     especially during a read or write operation, it is imperative that it
      225 +     panic the system then as well.
 261  226  
 262      -
 263      -       If the driver makes this discovery outside the timeout function,
 264      -       especially during a read or write operation, it is imperative that it
 265      -       panic the system then as well.
 266      -
 267  227  RETURN VALUES
 268      -       Each request returns -1 on failure and sets errno to indicate the
 269      -       error.
      228 +     Each request returns -1 on failure and sets errno to indicate the error.
 270  229  
 271      -       EPERM
 272      -                     Caller is not root.
      230 +     EPERM              Caller is not root.
 273  231  
      232 +     EACCES             Access rights were denied.
 274  233  
 275      -       EACCES
 276      -                     Access rights were denied.
      234 +     EIO                The multihost disk or controller was unable to
      235 +                        successfully complete the requested operation.
 277  236  
      237 +     EOPNOTSUP          The multihost disk does not support the operation.
      238 +                        For example, it does not support the SCSI-2
      239 +                        Reserve/Release command set, or the SCSI-3 Persistent
      240 +                        Reservation command set.
 278  241  
 279      -       EIO
 280      -                     The multihost disk or controller was unable to
 281      -                     successfully complete the requested operation.
      242 +STABILITY
      243 +     Uncommitted
 282  244  
 283      -
 284      -       EOPNOTSUP
 285      -                     The multihost disk does not support the operation. For
 286      -                     example, it does not support the SCSI-2 Reserve/Release
 287      -                     command set, or the SCSI-3 Persistent Reservation command
 288      -                     set.
 289      -
 290      -
 291      -ATTRIBUTES
 292      -       See attributes(5) for a description of the following attributes:
 293      -
 294      -
 295      -
 296      -
 297      -       +---------------+-----------------+
 298      -       |ATTRIBUTE TYPE | ATTRIBUTE VALUE |
 299      -       +---------------+-----------------+
 300      -       |Stability      | Evolving        |
 301      -       +---------------+-----------------+
 302      -
 303  245  SEE ALSO
 304      -       ioctl(2), open(2), attributes(5), open(2)
      246 +     ioctl(2), open(2), attributes(5)
 305  247  
 306      -
 307      -
 308      -                                March 18, 2011                         MHD(7I)
      248 +illumos                        October 23, 2017                        illumos
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX