mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
5abdb52fdc
The list of strings is used quite frequently and we'd like to reuse this simple structure for report selection support too. Make it part of libdevmapper for general reuse throughout the code. This also simplifies the LVM code a bit since we don't need to include and manage lvm-types.h anymore (the string list was the only structure defined there).
108 lines
3.1 KiB
C
108 lines
3.1 KiB
C
/*
|
|
* Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
|
* Copyright (C) 2004-2006 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_TEXT_LAYOUT_H
|
|
#define _LVM_TEXT_LAYOUT_H
|
|
|
|
#include "config.h"
|
|
#include "metadata.h"
|
|
#include "uuid.h"
|
|
|
|
/* disk_locn and data_area_list are defined in format-text.h */
|
|
|
|
#define PV_HEADER_EXTENSION_VSN 1
|
|
|
|
struct pv_header_extension {
|
|
uint32_t version;
|
|
uint32_t flags;
|
|
/* NULL-terminated list of bootloader areas */
|
|
struct disk_locn bootloader_areas_xl[0];
|
|
} __attribute__ ((packed));
|
|
|
|
/* Fields with the suffix _xl should be xlate'd wherever they appear */
|
|
/* On disk */
|
|
struct pv_header {
|
|
int8_t pv_uuid[ID_LEN];
|
|
|
|
/* This size can be overridden if PV belongs to a VG */
|
|
uint64_t device_size_xl; /* Bytes */
|
|
|
|
/* NULL-terminated list of data areas followed by */
|
|
/* NULL-terminated list of metadata area headers */
|
|
struct disk_locn disk_areas_xl[0]; /* Two lists */
|
|
} __attribute__ ((packed));
|
|
|
|
/*
|
|
* Ignore this raw location. This allows us to
|
|
* ignored metadata areas easily, and thus balance
|
|
* metadata across VGs with many PVs.
|
|
*/
|
|
#define RAW_LOCN_IGNORED 0x00000001
|
|
|
|
/* On disk */
|
|
struct raw_locn {
|
|
uint64_t offset; /* Offset in bytes to start sector */
|
|
uint64_t size; /* Bytes */
|
|
uint32_t checksum;
|
|
uint32_t flags;
|
|
} __attribute__ ((packed));
|
|
|
|
int rlocn_is_ignored(const struct raw_locn *rlocn);
|
|
void rlocn_set_ignored(struct raw_locn *rlocn, unsigned mda_ignored);
|
|
|
|
/* On disk */
|
|
/* Structure size limited to one sector */
|
|
struct mda_header {
|
|
uint32_t checksum_xl; /* Checksum of rest of mda_header */
|
|
int8_t magic[16]; /* To aid scans for metadata */
|
|
uint32_t version;
|
|
uint64_t start; /* Absolute start byte of mda_header */
|
|
uint64_t size; /* Size of metadata area */
|
|
|
|
struct raw_locn raw_locns[0]; /* NULL-terminated list */
|
|
} __attribute__ ((packed));
|
|
|
|
struct mda_header *raw_read_mda_header(const struct format_type *fmt,
|
|
struct device_area *dev_area);
|
|
|
|
struct mda_lists {
|
|
struct dm_list dirs;
|
|
struct dm_list raws;
|
|
struct metadata_area_ops *file_ops;
|
|
struct metadata_area_ops *raw_ops;
|
|
};
|
|
|
|
struct mda_context {
|
|
struct device_area area;
|
|
uint64_t free_sectors;
|
|
struct raw_locn rlocn; /* Store inbetween write and commit */
|
|
};
|
|
|
|
/* FIXME Convert this at runtime */
|
|
#define FMTT_MAGIC "\040\114\126\115\062\040\170\133\065\101\045\162\060\116\052\076"
|
|
#define FMTT_VERSION 1
|
|
#define MDA_HEADER_SIZE 512
|
|
#define LVM2_LABEL "LVM2 001"
|
|
#define MDA_SIZE_MIN (8 * (unsigned) lvm_getpagesize())
|
|
|
|
|
|
const char *vgname_from_mda(const struct format_type *fmt,
|
|
struct mda_header *mdah,
|
|
struct device_area *dev_area, struct id *vgid,
|
|
uint64_t *vgstatus, char **creation_host,
|
|
uint64_t *mda_free_sectors);
|
|
|
|
#endif
|