From 274b0fe4c4a08f444e83c6c34bb712ec1c921c4f Mon Sep 17 00:00:00 2001 From: mickey Date: Wed, 26 Apr 2000 20:44:50 +0000 Subject: [PATCH] disklabel manipulation routines page from netbsd w/ some adjustments; no history section --- share/man/man9/Makefile | 7 +- share/man/man9/disklabel.9 | 195 +++++++++++++++++++++++++++++++++++++ 2 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 share/man/man9/disklabel.9 diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile index 7a3f71ff1cb..1afd14ae1cd 100644 --- a/share/man/man9/Makefile +++ b/share/man/man9/Makefile @@ -1,9 +1,10 @@ -# $OpenBSD: Makefile,v 1.18 2000/04/26 19:41:20 mickey Exp $ +# $OpenBSD: Makefile,v 1.19 2000/04/26 20:44:50 mickey Exp $ # $NetBSD: Makefile,v 1.4 1996/01/09 03:23:01 thorpej Exp $ # Makefile for section 9 (kernel function and variable) manual pages. -MAN= boot.9 copy.9 ctxsw.9 disk.9 doshutdownhooks.9 fetch.9 fork1.9 \ +MAN= boot.9 copy.9 ctxsw.9 disk.9 disklabel.9 doshutdownhooks.9 \ + fetch.9 fork1.9 \ extent.9 hz.9 hzto.9 intro.9 inittodr.9 log.9 kthread.9 \ malloc.9 md5.9 microtime.9 panic.9 pfind.9 printf.9 \ psignal.9 ratecheck.9 resettodr.9 \ @@ -17,6 +18,8 @@ MLINKS+=ctxsw.9 cpu_switch.9 ctxsw.9 mi_switch.9 MLINKS+=disk.9 disk_init.9 disk.9 disk_attach.9 disk.9 disk_detatch.9 \ disk.9 disk_busy.9 disk.9 disk_unbusy.9 disk.9 disk_find.9 \ disk.9 disk_resetstat.9 +MLINKS+=disklabel.9 readdisklabel.9 disklabel.9 writedisklabel.9 \ + disklabel.9 setdisklabel.9 disklabel.9 bounds_check_with_label.9 MLINKS+=extent.9 extent_create.9 extent.9 extent_destroy.9 \ extent.9 extent_alloc.9 extent.9 extent_alloc_subregion.9 \ extent.9 extent_alloc_region.9 extent.9 extent_free.9 \ diff --git a/share/man/man9/disklabel.9 b/share/man/man9/disklabel.9 new file mode 100644 index 00000000000..9fc39f64d75 --- /dev/null +++ b/share/man/man9/disklabel.9 @@ -0,0 +1,195 @@ +.\" $NetBSD: disklabel.9,v 1.7 1999/03/06 22:09:29 mycroft Exp $ +.\" +.\" Copyright (c) 1996 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Paul Kranenburg. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the NetBSD +.\" Foundation, Inc. and its contributors. +.\" 4. Neither the name of The NetBSD Foundation nor the names of its +.\" contributors may be used to endorse or promote products derived +.\" from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 26, 1996 +.Dt DISKLABEL 9 +.Os +.Sh NAME +.Nm disklabel , +.Nm readdisklabel , +.Nm writedisklabel , +.Nm setdisklabel , +.Nm bounds_check_with_label +.Nd disk label management routines +.Sh SYNOPSIS +.Ft char * +.Fn readdisklabel "dev_t dev" "void (*strat)(struct buf *)" "struct disklabel *lp" "struct cpu_disklabel *osdep" "int spoofonly" +.Ft int +.Fn writedisklabel "dev_t dev" "void (*strat)(struct buf *)" "struct disklabel *lp" "struct cpu_disklabel *osdep" +.Ft int +.Fn setdisklabel "struct disklabel *olp" "struct disklabel *nlp" "u_long openmask" "struct cpu_disklabel *osdep" +.Ft int +.Fn bounds_check_with_label "struct buf *bp" "struct disklabel *lp" "struct cpu_disklabel *osdep" "int wlabel" +.Sh DESCRIPTION +This collection of routines provides a disklabel management interface to +kernel device drivers. +These routines are classified as machine- or architecture-dependent because +of restrictions imposed by the machine architecture and boot-strapping code +on the location of the label, or because cooperation with other operating +systems requires specialized conversion code. +.Pp +.Fn readdisklabel +attempts to read a disklabel from the device identified by +.Fa dev , +using the device strategy routine passed in +.Fa strat . +Note that a buffer structure is required to pass to the strategy routine; +it needs to be acquired and parametrized for the intended I/O operation, +and disposed of when the operation has completed. +Some fields in the in the disklabel passed in +.Fa 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 +.Dq d_secsize , +if non-zero, is used by +.Fn readdisklabel +to get an appropriately sized buffer to pass to the device strategy routine. +Unspecified fields in +.Fa lp +should be set to zero. +If the medium does not contain a native disklabel that can be read in directly +or +.Fa spoofonly +argument is a true value, +.Fn readdisklabel +may resort to constructing a label from other machine-dependent information +using the provided buffer passed in the +.Fa osdep +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 +.Dv NULL +string is returned. +.Pp +.Fn writedisklabel +stores disk label information contained in the disk label structure given by +.Fa lp +on the device identified by +.Fa dev . +Like +.Fn readdisklabel , +it acquires and sets up an I/O buffer to pass to the strategy routine +.Fa strat . +.Fn writedisklabel +may elect to do a machine-dependent conversion of the native disk label +structure +.Po +using the buffer pointed at by +.Fa osdep +.Pc , +to store the disk label onto the medium in a format complying with +architectural contraints. +.Fn writedisklabel +returns 0 on success and +.Dv EINVAL +if the disk label specifies invalid or unconvertable values. +Otherwise, any error condition reported by the device strategy routine +in the buffer's +.Dq Va b_error +field is returned. +.Pp +.Fn setdisklabel +checks a proposed new disk label passed in +.Fa 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 +.Fa olp +and +.Fa openmask , +which provide, respectively, the existing disk label and a bit mask +identifying the partitions that are currently in use. +Failure to pass on +.Dq basic sanity , +results in a +.Dv EINVAL +return value, while a vetoed update of the partition layout is signaled by a +.Dv EBUSY +return value. +Otherwise, 0 is returned. +.Pp +.Fn bounds_check_with_label +is used to check whether a device transfer described by +.Fa bp +to the device identified by +.Fa dev , +is properly contained within a disk partition of the disk with label +.Fa lp . +If this check fails, +.Fn bounds_check_with_label +sets the buffer's +.Dq Va b_error +field to +.Dv EINVAL +and sets the +.Dv B_ERROR +flag in +.Dq Va b_flags . +If the argument +.Fa wlabel +is zero, and the transfer is a write operation, a check is done if the transfer +would overwrite +.Pq a portion of +the disklabel area on the medium. +If that is the case, +.Dv EROFS +is set in +.Dq Va b_error +and the +.Dv B_ERROR +flag is set in +.Dq Va b_flags . +Note that +.Fa 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 +.Dv DIOCWLABEL +ioctl function. +Zero value is returned if any of the bound checks failed or +transfer was attempted exactly at the end of disk partition. +Otherwise the value of 1 is returned. +.Pp +.Sh SEE ALSO +.Xr disklabel 5 , +.Xr disklabel 8 , +.Xr fdisk 8 -- 2.20.1