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

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/mhd.7i
          +++ new/usr/src/man/man7i/mhd.7i
   1      -'\" te
   2    1  .\" Copyright (c) 2005 Sun Microsystems, Inc.  All Rights Reserved.
   3      -.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
   4      -.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
   5      -.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   6      -.TH MHD 7I "Mar 18, 2011"
   7      -.SH NAME
   8      -mhd \- multihost disk control operations
   9      -.SH SYNOPSIS
  10      -.LP
  11      -.nf
  12      -\fB#include\fR \fB<sys/mhd.h>\fR
  13      -.fi
  14      -
  15      -.SH DESCRIPTION
  16      -.sp
  17      -.LP
  18      -The  \fBmhd\fR \fBioctl\fR(2) control access rights of a multihost disk, using
        2 +.\" Copyright (c) 2017, Joyent, Inc.
        3 +.\" The contents of this file are subject to the terms of the
        4 +.\" Common Development and Distribution License (the "License").
        5 +.\" You may not use this file except in compliance with the License.
        6 +.\"
        7 +.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
        8 +.\" or http://www.opensolaris.org/os/licensing.
        9 +.\" See the License for the specific language governing permissions
       10 +.\" and limitations under the License.
       11 +.\"
       12 +.\" When distributing Covered Code, include this CDDL HEADER in each
       13 +.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
       14 +.\" If applicable, add the following below this CDDL HEADER, with the
       15 +.\" fields enclosed by brackets "[]" replaced with your own identifying
       16 +.\" information: Portions Copyright [yyyy] [name of copyright owner]
       17 +.Dd October 23, 2017
       18 +.Dt MHD 7I
       19 +.Os
       20 +.Sh NAME
       21 +.Nm mhd
       22 +.Nd multihost disk control operations
       23 +.Sh SYNOPSIS
       24 +.In sys/mhd.h
       25 +.Sh DESCRIPTION
       26 +The
       27 +.Nm
       28 +.Xr ioctl 2
       29 +control access rights of a multihost disk, using
  19   30  disk reservations on the disk device.
  20      -.sp
  21      -.LP
  22      -The stability level of this interface (see \fBattributes\fR(5)) is evolving. As
  23      -a result, the interface is subject to change and you should limit your use of
       31 +.Pp
       32 +The stability level of this interface (see
       33 +.Xr attributes 5 )
       34 +is evolving.
       35 +As a result, the interface is subject to change and you should limit your use of
  24   36  it.
  25      -.sp
  26      -.LP
       37 +.Pp
  27   38  The mhd ioctls fall into two major categories: (1) ioctls for non-shared
  28      -multihost disks and (2)  ioctls for shared multihost disks.
  29      -.sp
  30      -.LP
  31      -One ioctl, \fBMHIOCENFAILFAST\fR, is applicable to both non-shared and shared
  32      -multihost disks.  It is described after the first two categories.
  33      -.sp
  34      -.LP
       39 +multihost disks and (2) ioctls for shared multihost disks.
       40 +.Pp
       41 +One ioctl,
       42 +.Dv MHIOCENFAILFAST ,
       43 +is applicable to both non-shared and shared multihost disks.
       44 +It is described after the first two categories.
       45 +.Pp
  35   46  All the ioctls require root privilege.
  36      -.sp
  37      -.LP
       47 +.Pp
  38   48  For all of the ioctls, the caller should obtain the file descriptor for the
  39      -device by calling  \fBopen\fR(2) with the \fBO_NDELAY\fR flag; without the
  40      -\fBO_NDELAY\fR flag, the open may fail due to another host already having a
  41      -conflicting reservation on the device. Some of the ioctls below permit the
  42      -caller to forcibly clear a conflicting reservation held by another host,
  43      -however, in order to call the ioctl, the caller must first obtain the open file
  44      -descriptor.
  45      -.SS "Non-shared multihost disks"
  46      -.sp
  47      -.LP
  48      -Non-shared multihost disks ioctls consist of \fBMHIOCTKOWN\fR,
  49      -\fBMHIOCRELEASE\fR, \fBHIOCSTATUS\fR, and \fBMHIOCQRESERVE\fR. These ioctl
  50      -requests control the access rights of non-shared multihost disks. A non-shared
  51      -multihost disk is one that supports serialized, mutually exclusive I/O mastery
  52      -by the connected hosts. This is in contrast to the shared-disk model, in which
       49 +device by calling
       50 +.Xr open 2
       51 +with the
       52 +.Dv O_NDELAY
       53 +flag; without the
       54 +.Dv O_NDELAY
       55 +flag, the open may fail due to another host already having a
       56 +conflicting reservation on the device.
       57 +Some of the ioctls below permit the caller to forcibly clear a conflicting
       58 +reservation held by another host, however, in order to call the ioctl, the
       59 +caller must first obtain the open file descriptor.
       60 +.Ss "Non-shared multihost disks"
       61 +Non-shared multihost disks ioctls consist of
       62 +.Dv MHIOCTKOWN ,
       63 +.Dv MHIOCRELEASE ,
       64 +.Dv HIOCSTATUS ,
       65 +and
       66 +.Dv MHIOCQRESERVE .
       67 +These ioctl requests control the access rights of non-shared multihost disks.
       68 +A non-shared multihost disk is one that supports serialized, mutually exclusive
       69 +I/O mastery by the connected hosts.
       70 +This is in contrast to the shared-disk model, in which
  53   71  concurrent access is allowed from more than one host (see below).
  54      -.sp
  55      -.LP
       72 +.Pp
  56   73  A non-shared multihost disk can be in one of two states:
  57      -.RS +4
  58      -.TP
  59      -.ie t \(bu
  60      -.el o
       74 +.Bl -bullet -width indent
       75 +.It
  61   76  Exclusive access state, where only one connected host has I/O access
  62      -.RE
  63      -.RS +4
  64      -.TP
  65      -.ie t \(bu
  66      -.el o
  67      -Non-exclusive access state, where all connected hosts have I/O access. An
  68      -external hardware reset can cause the disk to enter the non-exclusive access
       77 +.It
       78 +Non-exclusive access state, where all connected hosts have I/O access.
       79 +An external hardware reset can cause the disk to enter the non-exclusive access
  69   80  state.
  70      -.RE
  71      -.sp
  72      -.LP
       81 +.El
       82 +.Pp
  73   83  Each multihost disk driver views the machine on which it's running as the
  74      -"local host"; each views all other machines as "remote hosts".  For each I/O or
  75      -ioctl request, the requesting host is the local host.
  76      -.sp
  77      -.LP
  78      -Note that the non-shared ioctls are designed to work with SCSI-2 disks. The
       84 +.Dq local host ;
       85 +each views all other machines as
       86 +.Dq remote hosts .
       87 +For each I/O or ioctl request, the requesting host is the local host.
       88 +.Pp
       89 +Note that the non-shared ioctls are designed to work with SCSI-2 disks.
       90 +The
  79   91  SCSI-2 RESERVE/RELEASE command set is the underlying hardware facility in the
  80   92  device that supports the non-shared ioctls.
  81      -.sp
  82      -.LP
       93 +.Pp
  83   94  The function prototypes for the non-shared ioctls are:
  84      -.sp
  85      -.in +2
  86      -.nf
  87      -ioctl(fd, MHIOCTKOWN);
  88      -ioctl(fd, MHIOCRELEASE);
  89      -ioctl(fd, MHIOCSTATUS);
  90      -ioctl(fd, MHIOCQRESERVE);
  91      -.fi
  92      -.in -2
  93      -
  94      -.sp
  95      -.ne 2
  96      -.na
  97      -\fB\fBMHIOCTKOWN\fR \fR
  98      -.ad
  99      -.RS 18n
       95 +.Bd -literal -offset 2n
       96 +.Fn ioctl fd MHIOCTKOWN ;
       97 +.Fn ioctl fd MHIOCRELEASE ;
       98 +.Fn ioctl fd MHIOCSTATUS ;
       99 +.Fn ioctl fd MHIOCQRESERVE ;
      100 +.Ed
      101 +.Bl -tag -width MHIOCQRESERVE
      102 +.It Dv MHIOCTKOWN
 100  103  Forcefully acquires exclusive access rights to the multihost disk for the local
 101      -host. Revokes all access rights to the multihost disk from remote hosts.
      104 +host.
      105 +Revokes all access rights to the multihost disk from remote hosts.
 102  106  Causes the disk to enter the exclusive access state.
 103      -.sp
      107 +.Pp
 104  108  Implementation Note: Reservations (exclusive access rights) broken via random
 105  109  resets should be reinstated by the driver upon their detection, for example, in
 106  110  the automatic probe function described below.
 107      -.RE
 108      -
 109      -.sp
 110      -.ne 2
 111      -.na
 112      -\fB\fBMHIOCRELEASE\fR \fR
 113      -.ad
 114      -.RS 18n
      111 +.It Dv MHIOCRELEASE
 115  112  Relinquishes exclusive access rights to the multihost disk for the local host.
 116      -On success, causes the disk to enter the  non- exclusive access state.
 117      -.RE
 118      -
 119      -.sp
 120      -.ne 2
 121      -.na
 122      -\fB\fBMHIOCSTATUS\fR \fR
 123      -.ad
 124      -.RS 18n
      113 +On success, causes the disk to enter the non- exclusive access state.
      114 +.It Dv MHIOCSTATUS
 125  115  Probes a multihost disk to determine whether the local host has access rights
 126      -to the disk. Returns  \fB0\fR if the local host has access to the disk,
 127      -\fB1\fR if it doesn't, and \fB-1\fR with errno set to  \fBEIO\fR if the probe
 128      -failed for some other reason.
 129      -.RE
 130      -
 131      -.sp
 132      -.ne 2
 133      -.na
 134      -\fB\fBMHIOCQRESERVE\fR \fR
 135      -.ad
 136      -.RS 18n
 137      -Issues, simply and only, a SCSI-2 Reserve command. If the attempt to reserve
      116 +to the disk.
      117 +Returns
      118 +.Sy 0
      119 +if the local host has access to the disk,
      120 +.Sy 1
      121 +if it doesn't, and
      122 +.Sy -1
      123 +with
      124 +.Va errno
      125 +set to
      126 +.Er EIO
      127 +if the probe failed for some other reason.
      128 +.It Dv MHIOCQRESERVE
      129 +Issues, simply and only, a SCSI-2 Reserve command.
      130 +If the attempt to reserve
 138  131  fails due to the SCSI error Reservation Conflict (which implies that some other
 139      -host has the device reserved), then the ioctl will return  \fB-1\fR with errno
 140      -set to  \fBEACCES\fR. The \fBMHIOCQRESERVE\fR ioctl does NOT issue a bus device
 141      -reset or bus reset prior to attempting the SCSI-2 reserve command.  It also
      132 +host has the device reserved), then the ioctl will return
      133 +.Sy -1
      134 +with
      135 +.Va errno
      136 +set to
      137 +.Er EACCES .
      138 +The
      139 +.Dv MHIOCQRESERVE
      140 +ioctl does NOT issue a bus device
      141 +reset or bus reset prior to attempting the SCSI-2 reserve command.
      142 +It also
 142  143  does not take care of re-instating reservations that disappear due to bus
 143  144  resets or bus device resets; if that behavior is desired, then the caller can
 144      -call \fBMHIOCTKOWN\fR after the \fBMHIOCQRESERVE\fR has returned success.  If
      145 +call
      146 +.Dv MHIOCTKOWN
      147 +after the
      148 +.Dv MHIOCQRESERVE
      149 +has returned success.
      150 +If
 145  151  the device does not support the SCSI-2 Reserve command, then the ioctl returns
 146      -\fB-1\fR with  \fBerrno\fR set to \fBENOTSUP.\fR The \fBMHIOCQRESERVE\fR ioctl
 147      -is intended to be used by high-availability or clustering software for a
 148      -"quorum" disk, hence, the "Q" in the name of the ioctl.
 149      -.RE
 150      -
 151      -.SS "Shared Multihost Disks"
 152      -.sp
 153      -.LP
 154      -Shared multihost disks ioctls control access to shared multihost disks. The
 155      -ioctls are merely a veneer on the SCSI-3 Persistent Reservation facility.
      152 +.Er -1
      153 +with
      154 +.Va errno
      155 +set to
      156 +.Er ENOTSUP .
      157 +The
      158 +.Dv MHIOCQRESERVE
      159 +ioctl is intended to be used by high-availability or clustering software for a
      160 +.Dq quorum
      161 +disk, hence, the
      162 +.Dq Q
      163 +in the name of the ioctl.
      164 +.El
      165 +.Ss "Shared Multihost Disks"
      166 +Shared multihost disks ioctls control access to shared multihost disks.
      167 +The ioctls are merely a veneer on the SCSI-3 Persistent Reservation facility.
 156  168  Therefore, the underlying semantic model is not described in detail here, see
 157      -instead the SCSI-3 standard. The SCSI-3 Persistent Reservations support the
      169 +instead the SCSI-3 standard.
      170 +The SCSI-3 Persistent Reservations support the
 158  171  concept of a group of hosts all sharing access to a disk.
 159      -.sp
 160      -.LP
      172 +.Pp
 161  173  The function prototypes and descriptions for the shared multihost ioctls are as
 162  174  follows:
 163      -.sp
 164      -.ne 2
 165      -.na
 166      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_INKEYS\fR, (\fBmhioc_inkeys_t\fR)
 167      -\fI*k\fR\fB);\fR\fR
 168      -.ad
 169      -.sp .6
 170      -.RS 4n
 171      -Issues the SCSI-3 command Persistent Reserve In Read Keys to the device.  On
 172      -input, the field \fBk->li\fR should be initialized by the caller with
 173      -\fBk->li.listsize\fR reflecting how big of an array the caller has allocated
 174      -for the \fBk->li.list\fR field and with \fBk->li.listlen\fR \fB==\fR \fB0.\fR
 175      -On return, the field \fBk->li.listlen\fR is updated to indicate the number of
      175 +.Bl -tag -width 1n
      176 +.It Fn ioctl fd MHIOCGRP_INKEYS "(mhioc_inkeys_t *)k"
      177 +.Pp
      178 +Issues the SCSI-3 command Persistent Reserve In Read Keys to the device.
      179 +On input, the field
      180 +.Fa k->li
      181 +should be initialized by the caller with
      182 +.Fa k->li.listsize
      183 +reflecting how big of an array the caller has allocated for the
      184 +.Fa k->lilist
      185 +field and with
      186 +.Ql k->li.listlen\& ==\& 0 .
      187 +On return, the field
      188 +.Fa k->li.listlen
      189 +is updated to indicate the number of
 176  190  reservation keys the device currently has: if this value is larger than
 177      -\fBk->li.listsize\fR then that indicates that the caller should have passed a
 178      -bigger \fBk->li.list\fR array with a bigger \fBk->li.listsize.\fR The number of
 179      -array elements actually written by the callee into \fBk->li.list\fR is the
 180      -minimum of \fBk->li.listlen\fR and \fBk->li.listsize.\fR The field
 181      -k->generation is updated with the generation information returned by the SCSI-3
 182      -Read Keys query. If the device does not support SCSI-3 Persistent Reservations,
 183      -then this ioctl returns \fB-1\fR with \fBerrno\fR set to  \fBENOTSUP\fR.
 184      -.RE
 185      -
 186      -.sp
 187      -.ne 2
 188      -.na
 189      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_INRESV\fR, (\fBmhioc_inresvs_t\fR)
 190      -\fI*r\fR\fB);\fR\fR
 191      -.ad
 192      -.sp .6
 193      -.RS 4n
      191 +.Fa k->li.listsize
      192 +then that indicates that the caller should have passed a bigger
      193 +.Fa k->li.list
      194 +array with a bigger
      195 +.Fa k->li.listsize .
      196 +The number of array elements actually written by the callee into
      197 +.Fa k->li.list
      198 +is the minimum of
      199 +.Fa k->li.listlen
      200 +and
      201 +.Fa k->li.listsize .
      202 +The field
      203 +.Fa k->generation
      204 +is updated with the generation information returned by the SCSI-3
      205 +Read Keys query.
      206 +If the device does not support SCSI-3 Persistent Reservations,
      207 +then this ioctl returns
      208 +.Sy -1
      209 +with
      210 +.Va errno
      211 +set to
      212 +.Er ENOTSUP .
      213 +.It Fn ioctl fd MHIOCGRP_INRESV "(mhioc_inresvs_t *)r"
      214 +.Pp
 194  215  Issues the SCSI-3 command Persistent Reserve In Read Reservations to the
 195      -device. Remarks similar to \fBMHIOCGRP_INKEYS\fR apply to the array
 196      -manipulation.  If the device does not support SCSI-3 Persistent Reservations,
 197      -then this ioctl returns \fB-1\fR with \fBerrno\fR set to \fBENOTSUP\fR.
 198      -.RE
 199      -
 200      -.sp
 201      -.ne 2
 202      -.na
 203      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_REGISTER\fR, (\fBmhioc_register_t\fR)
 204      -\fI*r\fR\fB);\fR\fR
 205      -.ad
 206      -.sp .6
 207      -.RS 4n
 208      -Issues the SCSI-3 command Persistent Reserve Out Register. The fields of
 209      -structure \fIr\fR are all inputs; none of the fields are modified by the ioctl.
 210      -The field \fBr->aptpl\fR should be set to true to specify that  registrations
      216 +device.
      217 +Remarks similar to
      218 +.Dv MHIOCGRP_INKEYS
      219 +apply to the array manipulation.
      220 +If the device does not support SCSI-3 Persistent Reservations,
      221 +then this ioctl returns
      222 +.Sy -1
      223 +with
      224 +.Va errno
      225 +set to
      226 +.Er ENOTSUP .
      227 +.It Fn ioctl fd MHIOCGRP_REGISTER "(mhioc_register_t *)r"
      228 +.Pp
      229 +Issues the SCSI-3 command Persistent Reserve Out Register.
      230 +The fields of structure
      231 +.Va r
      232 +are all inputs; none of the fields are modified by the ioctl.
      233 +The field
      234 +.Fa r->aptpl
      235 +should be set to true to specify that registrations
 211  236  and reservations should persist across device power failures, or to false to
 212  237  specify that registrations and reservations should be cleared upon device power
 213      -failure; true is the recommended setting. The field \fBr->oldkey\fR is the key
 214      -that the caller believes the device may already have for this host initiator;
 215      -if the caller believes that that this host initiator is not already registered
 216      -with this device, it should pass the special key of all zeros.  To achieve the
 217      -effect of unregistering with the device, the caller should pass its current key
 218      -for the \fBr->oldkey\fR field and an \fBr->newkey\fR field containing the
 219      -special key of all zeros.  If the device returns the SCSI error code
 220      -Reservation Conflict, this ioctl returns \fB-1\fR with \fBerrno\fR set to
 221      -\fBEACCES\fR.
 222      -.RE
 223      -
 224      -.sp
 225      -.ne 2
 226      -.na
 227      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_RESERVE\fR, (\fBmhioc_resv_desc_t\fR)
 228      -\fI*r\fR\fB);\fR\fR
 229      -.ad
 230      -.sp .6
 231      -.RS 4n
 232      -Issues the SCSI-3 command Persistent Reserve Out Reserve. The fields of
 233      -structure \fIr\fR are all inputs; none of the fields are modified by the ioctl.
      238 +failure; true is the recommended setting.
      239 +The field
      240 +.Fa r->oldkey
      241 +is the key that the caller believes the device may already have for this host
      242 +initiator; if the caller believes that that this host initiator is not already
      243 +registered with this device, it should pass the special key of all zeros.
      244 +To achieve the effect of unregistering with the device, the caller should pass
      245 +its current key for the
      246 +.Fa r->oldkey
      247 +field and an
      248 +.Fa r->newkey
      249 +field containing the special key of all zeros.
      250 +If the device returns the SCSI error code
      251 +Reservation Conflict, this ioctl returns
      252 +.Sy -1
      253 +with
      254 +.Va errno
      255 +set to
      256 +.Er EACCES .
      257 +.It Fn ioctl fd MHIOCGRP_RESERVE "(mhioc_resv_desc_t *)r"
      258 +.Pp
      259 +Issues the SCSI-3 command Persistent Reserve Out Reserve.
      260 +The fields of
      261 +structure
      262 +.Va r
      263 +are all inputs; none of the fields are modified by the ioctl.
 234  264  If the device returns the SCSI error code Reservation Conflict, this ioctl
 235      -returns \fB-1\fR with \fBerrno\fR set to \fBEACCES.\fR
 236      -.RE
 237      -
 238      -.sp
 239      -.ne 2
 240      -.na
 241      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_PREEMPTANDABORT\fR,
 242      -(\fBmhioc_preemptandabort_t\fR) \fI*r\fR\fB);\fR\fR
 243      -.ad
 244      -.sp .6
 245      -.RS 4n
 246      -Issues the SCSI-3 command Persistent Reserve Out Preempt-And-Abort.  The fields
 247      -of structure \fIr\fR are all inputs; none of the fields are modified by the
 248      -ioctl. The key of the victim host is specified by the field
 249      -\fBr->victim_key\fR. The field \fBr->resvdesc\fR supplies the preempter's key
 250      -and the reservation that it is requesting as part of the SCSI-3
 251      -Preempt-And-Abort command.  If the device returns the SCSI error code
 252      -Reservation Conflict, this ioctl returns \fB-1\fR with \fBerrno\fR set to
 253      -\fBEACCES.\fR
 254      -.RE
 255      -
 256      -.sp
 257      -.ne 2
 258      -.na
 259      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_PREEMPT\fR,
 260      -(\fBmhioc_preemptandabort_t\fR) \fI*r\fR\fB);\fR\fR
 261      -.ad
 262      -.sp .6
 263      -.RS 4n
 264      -Similar to \fBMHIOCGRP_PREEMPTANDABORT\fR, but instead issues the SCSI-3
 265      -command Persistent Reserve Out Preempt. (Note: This command is not
 266      -implemented).
 267      -.RE
 268      -
 269      -.sp
 270      -.ne 2
 271      -.na
 272      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOCGRP_CLEAR\fR, (\fBmhioc_resv_key_t\fR)
 273      -\fI*r\fR\fB);\fR\fR
 274      -.ad
 275      -.sp .6
 276      -.RS 4n
 277      -Issues the SCSI-3 command Persistent Reserve Out Clear. The input parameter
 278      -\fIr\fR is the reservation key of the caller, which should have been already
 279      -registered with the device, by an earlier call to \fBMHIOCGRP_REGISTER\fR.
 280      -.RE
 281      -
 282      -.sp
 283      -.LP
      265 +returns
      266 +.Sy -1
      267 +with
      268 +.Va errno
      269 +set to
      270 +.Er EACCES .
      271 +.It Fn ioctl fd MHIOCGRP_PREEMPTANDABORT "(mhioc_preemptandabort_t *)r"
      272 +.Pp
      273 +Issues the SCSI-3 command Persistent Reserve Out Preempt-And-Abort.
      274 +The fields
      275 +of structure
      276 +.Va r
      277 +are all inputs; none of the fields are modified by the ioctl.
      278 +The key of the victim host is specified by the field
      279 +.Fa r->victim_key .
      280 +The field
      281 +.Fa r->resvdesc
      282 +supplies the preempter's key and the reservation that it is requesting as part
      283 +of the SCSI-3 Preempt-And-Abort command.
      284 +If the device returns the SCSI error code
      285 +Reservation Conflict, this ioctl returns
      286 +.Sy -1
      287 +with
      288 +.Va errno
      289 +set to
      290 +.Er EACCES .
      291 +.It Fn ioctl fd MHIOCGRP_PREEMPT "(mhioc_preemptandabort_t *)r"
      292 +.Pp
      293 +Similar to
      294 +.Dv MHIOCGRP_PREEMPTANDABORT ,
      295 +but instead issues the SCSI-3 command Persistent Reserve Out Preempt.
      296 +(Note: This command is not implemented).
      297 +.It Fn ioctl fd MHIOCGRP_CLEAR "(mhioc_resv_key_t *)r"
      298 +Issues the SCSI-3 command Persistent Reserve Out Clear.
      299 +The input parameter
      300 +.Va r
      301 +is the reservation key of the caller, which should have been already
      302 +registered with the device, by an earlier call to
      303 +.Dv MHIOCGRP_REGISTER .
      304 +.El
      305 +.Pp
 284  306  For each device, the non-shared ioctls should not be mixed with the Persistent
 285  307  Reserve Out shared ioctls, and vice-versa,  otherwise, the underlying device is
 286  308  likely to return errors, because SCSI does not permit SCSI-2 reservations to be
 287      -mixed with SCSI-3 reservations on a single device. It is, however, legitimate
      309 +mixed with SCSI-3 reservations on a single device.
      310 +It is, however, legitimate
 288  311  to call the Persistent Reserve In ioctls, because these are query only.
 289      -Issuing the \fBMHIOCGRP_INKEYS\fR ioctl  is the recommended way for a caller to
 290      -determine if the device  supports SCSI-3 Persistent Reservations (the ioctl
 291      -will return \fB-1\fR with  \fBerrno\fR set to  \fBENOTSUP\fR if the device does
 292      -not).
 293      -.SS "MHIOCENFAILFAST Ioctl"
 294      -.sp
 295      -.LP
 296      -The \fBMHIOCENFAILFAST\fR ioctl is applicable for both non-shared and shared
      312 +Issuing the
      313 +.Dv MHIOCGRP_INKEYS
      314 +ioctl is the recommended way for a caller to
      315 +determine if the device supports SCSI-3 Persistent Reservations (the ioctl
      316 +will return
      317 +.Sy -1
      318 +with
      319 +.Va errno
      320 +set to
      321 +.Er ENOTSUP
      322 +if the device does not).
      323 +.Ss "MHIOCENFAILFAST Ioctl"
      324 +The
      325 +.Dv MHIOCENFAILFAST
      326 +ioctl is applicable for both non-shared and shared
 297  327  disks, and may be used with either the non-shared or shared ioctls.
 298      -.sp
 299      -.ne 2
 300      -.na
 301      -\fB\fBioctl\fR(\fBfd\fR, \fBMHIOENFAILFAST\fR, (unsigned int \fI*\fR)
 302      -\fImillisecs\fR\fB);\fR\fR
 303      -.ad
 304      -.sp .6
 305      -.RS 4n
      328 +.Bl -tag -width 1n
      329 +.It Fn ioctl fd MHIOENFAILFAST "(unsigned int *)millisecs"
      330 +.Pp
 306  331  Enables or disables the failfast option in the multihost disk driver and
 307  332  enables or disables automatic probing of a multihost disk, described below.
 308  333  The argument is an unsigned integer specifying the number of milliseconds to
 309      -wait between executions of the automatic probe function.  An argument of zero
 310      -disables the failfast option and disables automatic probing.  If the
 311      -\fBMHIOCENFAILFAST\fR ioctl is never called, the effect is defined to be that
      334 +wait between executions of the automatic probe function.
      335 +An argument of zero disables the failfast option and disables automatic probing.
      336 +If the
      337 +.Dv MHIOCENFAILFAST
      338 +ioctl is never called, the effect is defined to be that
 312  339  both the failfast option and automatic probing are disabled.
 313      -.RE
 314      -
 315      -.SS "Automatic Probing"
 316      -.sp
 317      -.LP
 318      -The \fBMHIOCENFAILFAST\fR ioctl sets up a timeout in the driver to periodically
 319      -schedule automatic probes of  the  disk. The automatic probe function works in
 320      -this manner: The driver is scheduled  to probe the multihost disk every n
 321      -milliseconds, rounded up to the next integral multiple of the system  clock's
 322      -resolution. If
 323      -.RS +4
 324      -.TP
 325      -1.
 326      -the local host no longer has access  rights  to  the multihost disk, and
 327      -.RE
 328      -.RS +4
 329      -.TP
 330      -2.
 331      -access rights were expected to be held by the  local host,
 332      -.RE
 333      -.sp
 334      -.LP
      340 +.El
      341 +.Ss "Automatic Probing"
      342 +The
      343 +.Dv MHIOCENFAILFAST
      344 +ioctl sets up a timeout in the driver to periodically
      345 +schedule automatic probes of the disk.
      346 +The automatic probe function works in this manner: The driver is scheduled to
      347 +probe the multihost disk every n milliseconds, rounded up to the next integral
      348 +multiple of the system clock's resolution.
      349 +If
      350 +.Bl -enum -offset indent
      351 +.It
      352 +the local host no longer has access rights to the multihost disk, and
      353 +.It
      354 +access rights were expected to be held by the local host,
      355 +.El
      356 +.Pp
 335  357  the driver immediately panics the machine to comply with the failfast model.
 336      -.sp
 337      -.LP
      358 +.Pp
 338  359  If the driver makes this discovery outside the timeout function, especially
 339  360  during a read or write operation, it is imperative that it panic the system
 340  361  then as well.
 341      -.SH RETURN VALUES
 342      -.sp
 343      -.LP
 344      -Each request returns \fB-1\fR on failure and sets \fBerrno\fR to indicate the
 345      -error.
 346      -.sp
 347      -.ne 2
 348      -.na
 349      -\fB\fBEPERM\fR \fR
 350      -.ad
 351      -.RS 14n
      362 +.Sh RETURN VALUES
      363 +Each request returns
      364 +.Sy -1
      365 +on failure and sets
      366 +.Va errno
      367 +to indicate the error.
      368 +.Bl -tag -width Er
      369 +.It Er EPERM
 352  370  Caller is not root.
 353      -.RE
 354      -
 355      -.sp
 356      -.ne 2
 357      -.na
 358      -\fB\fBEACCES\fR \fR
 359      -.ad
 360      -.RS 14n
      371 +.It Er EACCES
 361  372  Access rights were denied.
 362      -.RE
 363      -
 364      -.sp
 365      -.ne 2
 366      -.na
 367      -\fB\fBEIO\fR\fR
 368      -.ad
 369      -.RS 14n
      373 +.It Er EIO
 370  374  The multihost disk or controller was unable to successfully complete the
 371  375  requested operation.
 372      -.RE
 373      -
 374      -.sp
 375      -.ne 2
 376      -.na
 377      -\fB\fBEOPNOTSUP\fR \fR
 378      -.ad
 379      -.RS 14n
 380      -The multihost disk does not support the operation. For example, it does not
 381      -support the SCSI-2 Reserve/Release command set, or the SCSI-3 Persistent
 382      -Reservation command set.
 383      -.RE
 384      -
 385      -.SH ATTRIBUTES
 386      -.sp
 387      -.LP
 388      -See \fBattributes\fR(5) for a description of the following attributes:
 389      -.sp
 390      -
 391      -.sp
 392      -.TS
 393      -box;
 394      -c | c
 395      -l | l .
 396      -ATTRIBUTE TYPE  ATTRIBUTE VALUE
 397      -_
 398      -Stability       Evolving
 399      -.TE
 400      -
 401      -.SH SEE ALSO
 402      -.sp
 403      -.LP
 404      -\fBioctl\fR(2), \fBopen\fR(2), \fBattributes\fR(5), open(2)
      376 +.It Er EOPNOTSUP
      377 +The multihost disk does not support the operation.
      378 +For example, it does not support the SCSI-2 Reserve/Release command set, or the
      379 +SCSI-3 Persistent Reservation command set.
      380 +.El
      381 +.Sh STABILITY
      382 +Uncommitted
      383 +.Sh SEE ALSO
      384 +.Xr ioctl 2 ,
      385 +.Xr open 2 ,
      386 +.Xr attributes 5
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX