| DISKLABEL(9) | Kernel Developer's Manual | DISKLABEL(9) | 
disklabel, readdisklabel,
  writedisklabel, setdisklabel,
  bounds_check_with_label —
readdisklabel(dev_t
  dev, void (*strat)(struct
  buf *), struct disklabel
  *lp, struct cpu_disklabel
  *clp);
int
  
  writedisklabel(dev_t
    dev, void (*strat)(struct
    buf *), struct disklabel
    *lp, struct cpu_disklabel
    *clp);
int
  
  setdisklabel(struct
    disklabel *olp, struct
    disklabel *nlp, u_long
    openmask, struct
    cpu_disklabel *clp);
int
  
  bounds_check_with_label(struct
    buf *bp, struct disklabel
    *lp, int
  wlabel);
readdisklabel() attempts to read a
    disklabel from the device identified by dev, using the
    device strategy routine passed in strat. Note that a
    buffer structure is required to pass to the strategy routine; it needs to be
    acquired and parameterized for the intended I/O operation, and disposed of
    when the operation has completed. Some fields in the disklabel passed in
    lp may be pre-initialized by the caller in order to
    meet device driver requirements for the I/O operation initiated to get to
    the disklabel data on the medium. In particular, the field
    “d_secsize”, if non-zero, is used by
    readdisklabel() to get an appropriately sized buffer
    to pass to the device strategy routine. Unspecified fields in
    lp should be set to zero. If the medium does not
    contain a native disklabel that can be read in directly,
    readdisklabel() may resort to constructing a label
    from other machine-dependent information using the provided buffer passed in
    the clp argument. If a disk label can not be found or
    constructed, a string containing an approximated description of the failure
    mode is returned. Otherwise the NULL string is
    returned.
writedisklabel() stores disk label
    information contained in the disk label structure given by
    lp on the device identified by
    dev. Like readdisklabel(), it
    acquires and sets up an I/O buffer to pass to the strategy routine
    strat. writedisklabel() may
    elect to do a machine-dependent conversion of the native disk label
    structure (using the buffer pointed at by clp), to
    store the disk label onto the medium in a format complying with
    architectural constraints. writedisklabel() returns
    0 on success and EINVAL if the disk label specifies
    invalid or inconvertible values. Otherwise, any error condition reported by
    the device strategy routine in the buffer's
    “b_error” field is returned.
setdisklabel() checks a proposed new disk
    label passed in nlp for some amount of basic sanity.
    This includes a check on attempts to change the location, or reduce the
    size, of an existing disk partition that is currently in use by the system.
    The current disposition of the disk partitions is made available through
    olp and openmask, which provide,
    respectively, the existing disk label and a bit mask identifying the
    partitions that are currently in use. Failure to pass on “basic
    sanity”, results in a EINVAL return value,
    while a vetoed update of the partition layout is signaled by a
    EBUSY return value. Otherwise, 0 is returned.
bounds_check_with_label() is used to check
    whether a device transfer described by bp to the
    device identified by dev, is properly contained within
    a disk partition of the disk with label lp. If this
    check fails, bounds_check_with_label() sets the
    buffer's “b_error” field to
    EINVAL, sets the B_ERROR
    flag in “b_flags”, and returns -1. If
    the argument wlabel is zero, and the transfer is a
    write operation, a check is done if the transfer would overwrite (a portion
    of) the disklabel area on the medium. If that is the case,
    EROFS is set in
    “b_error”, the
    B_ERROR flag is set in
    “b_flags”, and -1 is returned. Note that
    wlabel should be set to a non-zero value if the
    intended operation is expected to install or update the disk label. Programs
    that intend to do so using the raw device interface should notify the driver
    by using a DIOCWLABEL ioctl function.
| December 26, 1996 | NetBSD 10.0 |