mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-03 05:18:29 +03:00
o LVM1 labeller.
This commit is contained in:
parent
ea31a9b09c
commit
9056f65b0c
@ -28,6 +28,7 @@ SOURCES=\
|
|||||||
format1/import-export.c \
|
format1/import-export.c \
|
||||||
format1/import-extents.c \
|
format1/import-extents.c \
|
||||||
format1/layout.c \
|
format1/layout.c \
|
||||||
|
format1/lvm1_label.c \
|
||||||
format1/vg_number.c \
|
format1/vg_number.c \
|
||||||
format_text/archive.c \
|
format_text/archive.c \
|
||||||
format_text/export.c \
|
format_text/export.c \
|
||||||
|
124
lib/format1/lvm1_label.c
Normal file
124
lib/format1/lvm1_label.c
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2002 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "lvm1_label.h"
|
||||||
|
#include "dbg_malloc.h"
|
||||||
|
#include "pool.h"
|
||||||
|
#include "disk-rep.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "label.h"
|
||||||
|
|
||||||
|
static void _not_supported(const char *op)
|
||||||
|
{
|
||||||
|
log_err("The '%s' operation is not supported for the lvm1 labeller.",
|
||||||
|
op);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _can_handle(struct labeller *l, struct device *dev)
|
||||||
|
{
|
||||||
|
struct pool *mem = (struct pool *) l->private;
|
||||||
|
struct disk_list *dl;
|
||||||
|
|
||||||
|
dl = read_disk(dev, mem, NULL);
|
||||||
|
pool_empty(mem);
|
||||||
|
return dl ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _write(struct labeller *l,
|
||||||
|
struct device *dev, struct label *label)
|
||||||
|
{
|
||||||
|
_not_supported("write");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _remove(struct labeller *l, struct device *dev)
|
||||||
|
{
|
||||||
|
_not_supported("remove");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct label *_to_label(struct disk_list *dl)
|
||||||
|
{
|
||||||
|
struct label *l;
|
||||||
|
|
||||||
|
if (!(l = dbg_malloc(sizeof(*l)))) {
|
||||||
|
log_err("Couldn't allocate label.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(&l->id, &dl->pvd.pv_uuid, sizeof(l->id));
|
||||||
|
strcpy(l->volume_type, "lvm1");
|
||||||
|
l->version[0] = 1;
|
||||||
|
l->version[0] = 0;
|
||||||
|
l->version[0] = 0;
|
||||||
|
|
||||||
|
l->extra_len = 0;
|
||||||
|
l->extra_info = NULL;
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int _read(struct labeller *l,
|
||||||
|
struct device *dev, struct label **label)
|
||||||
|
{
|
||||||
|
struct pool *mem = (struct pool *) l->private;
|
||||||
|
struct disk_list *dl;
|
||||||
|
int r = 0;
|
||||||
|
|
||||||
|
if (!(dl = read_disk(dev, mem, NULL))) {
|
||||||
|
log_err("Couldn't read lvm1 label.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert the disk_list into a label structure.
|
||||||
|
*/
|
||||||
|
if ((*label = _to_label(dl)))
|
||||||
|
r = 1;
|
||||||
|
else
|
||||||
|
stack;
|
||||||
|
|
||||||
|
pool_empty(mem);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _destroy(struct labeller *l)
|
||||||
|
{
|
||||||
|
struct pool *mem = (struct pool *) l->private;
|
||||||
|
pool_destroy(mem);
|
||||||
|
dbg_free(l->private);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct label_ops _lvm1_ops = {
|
||||||
|
can_handle: _can_handle,
|
||||||
|
write: _write,
|
||||||
|
remove: _remove,
|
||||||
|
read: _read,
|
||||||
|
verify: _can_handle,
|
||||||
|
destroy: _destroy
|
||||||
|
};
|
||||||
|
|
||||||
|
struct labeller *lvm1_labeller_create(void)
|
||||||
|
{
|
||||||
|
struct labeller *l;
|
||||||
|
struct pool *mem;
|
||||||
|
|
||||||
|
if (!(l = dbg_malloc(sizeof(*l)))) {
|
||||||
|
log_err("Couldn't allocate labeller object.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(mem = pool_create(256))) {
|
||||||
|
log_err("Couldn't create pool object for labeller.");
|
||||||
|
dbg_free(l);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
l->ops = &_lvm1_ops;
|
||||||
|
l->private = mem;
|
||||||
|
|
||||||
|
return l;
|
||||||
|
}
|
12
lib/format1/lvm1_label.h
Normal file
12
lib/format1/lvm1_label.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2002 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LVM_LVM1_LABEL_H
|
||||||
|
#define _LVM_LVM1_LABEL_H
|
||||||
|
|
||||||
|
struct labeller *lvm1_labeller_create(void);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user