DISKLABEL(9)

πŸ“¦
version 11.0 Β· 2 versions
, in nixpkgs unstable

🌸 NAME 🌸

okay bestie, this is DISKLABEL(9) from the Kernel Developer's Manual β€” the disk label management routines page. The whole squad is disklabel, readdisklabel, writedisklabel, setdisklabel, and bounds_check_with_label, and they handle disk label management routines. no cap πŸ’…

πŸ›  SYNOPSIS πŸ› 

char *
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);

πŸ’… 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. iconic behavior honestly ✨

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. bestie, that return value detail matters fr fr πŸŽ€

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. slay πŸ’–

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. vibe check passed? good πŸ’…

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. no cap, those error paths are important πŸ”₯

🫢 bestie reminder: if you're doing the raw-device thing and expect to install or update the disk label, wlabel should be non-zero β€” and that's exactly why DIOCWLABEL exists in this page.

πŸ‘€ SEE ALSO πŸ‘€

go read those too, iykyk 🌈


xoxo πŸ’Œ this page came from Debian, dated December 26, 1996 β€” bye bestie, stay iconic πŸŽ€πŸ’–

πŸ“¦ where this page comes from