diff options
author | Anas Nashif <anas.nashif@intel.com> | 2013-03-05 01:43:20 -0800 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2013-03-05 01:43:20 -0800 |
commit | 8bd28eea831fd5215c12e6fcecc8e9a772398ed9 (patch) | |
tree | 2579ba0d9921953cadfc17006c47ff419382898a /lib/label/label.h | |
download | device-mapper-8bd28eea831fd5215c12e6fcecc8e9a772398ed9.tar.gz device-mapper-8bd28eea831fd5215c12e6fcecc8e9a772398ed9.tar.bz2 device-mapper-8bd28eea831fd5215c12e6fcecc8e9a772398ed9.zip |
Imported Upstream version 2.02.79upstream/2.02.79
Diffstat (limited to 'lib/label/label.h')
-rw-r--r-- | lib/label/label.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/lib/label/label.h b/lib/label/label.h new file mode 100644 index 0000000..3e07f06 --- /dev/null +++ b/lib/label/label.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved. + * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. + * + * This file is part of LVM2. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the GNU Lesser General Public License v.2.1. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _LVM_LABEL_H +#define _LVM_LABEL_H + +#include "uuid.h" +#include "device.h" + +#define LABEL_ID "LABELONE" +#define LABEL_SIZE SECTOR_SIZE /* Think very carefully before changing this */ +#define LABEL_SCAN_SECTORS 4L +#define LABEL_SCAN_SIZE (LABEL_SCAN_SECTORS << SECTOR_SHIFT) + +struct labeller; + +/* On disk - 32 bytes */ +struct label_header { + int8_t id[8]; /* LABELONE */ + uint64_t sector_xl; /* Sector number of this label */ + uint32_t crc_xl; /* From next field to end of sector */ + uint32_t offset_xl; /* Offset from start of struct to contents */ + int8_t type[8]; /* LVM2 001 */ +} __attribute__ ((packed)); + +/* In core */ +struct label { + char type[8]; + uint64_t sector; + struct labeller *labeller; + void *info; +}; + +struct labeller; + +struct label_ops { + /* + * Is the device labelled with this format ? + */ + int (*can_handle) (struct labeller * l, void *buf, uint64_t sector); + + /* + * Write a label to a volume. + */ + int (*write) (struct label * label, void *buf); + + /* + * Read a label from a volume. + */ + int (*read) (struct labeller * l, struct device * dev, + void *buf, struct label ** label); + + /* + * Additional consistency checks for the paranoid. + */ + int (*verify) (struct labeller * l, void *buf, uint64_t sector); + + /* + * Populate label_type etc. + */ + int (*initialise_label) (struct labeller * l, struct label * label); + + /* + * Destroy a previously read label. + */ + void (*destroy_label) (struct labeller * l, struct label * label); + + /* + * Destructor. + */ + void (*destroy) (struct labeller * l); +}; + +struct labeller { + struct label_ops *ops; + const void *private; +}; + +int label_init(void); +void label_exit(void); + +int label_register_handler(const char *name, struct labeller *handler); + +struct labeller *label_get_handler(const char *name); + +int label_remove(struct device *dev); +int label_read(struct device *dev, struct label **result, + uint64_t scan_sector); +int label_write(struct device *dev, struct label *label); +int label_verify(struct device *dev); +struct label *label_create(struct labeller *labeller); +void label_destroy(struct label *label); + +#endif |