mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
o Sync. only
This commit is contained in:
parent
a7af42f14c
commit
7c77eca4f7
164
lib/format_text/format-text.c
Normal file
164
lib/format_text/format-text.c
Normal file
@ -0,0 +1,164 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "format-text.h"
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
#include "pool.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "hash.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The text format is a human readable metadata
|
||||||
|
* format that will be used to store the metadata
|
||||||
|
* backups from the LVM2 system. By being human
|
||||||
|
* readable it is hoped that people will be able
|
||||||
|
* to recieve a lot more support when things go
|
||||||
|
* wrong.
|
||||||
|
*
|
||||||
|
* The format instance is given a directory path
|
||||||
|
* upon creation. Each file in this directory
|
||||||
|
* whose name is of the form '*.vg' is a config
|
||||||
|
* file (see lib/config.[hc]), which contains a
|
||||||
|
* description of a single volume group.
|
||||||
|
*
|
||||||
|
* The prefix of the config file gives the volume group
|
||||||
|
* name.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
struct text_c {
|
||||||
|
char *dir;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns a list of config files, one for each
|
||||||
|
* .vg file in the given directory.
|
||||||
|
*/
|
||||||
|
struct config_list {
|
||||||
|
struct list list;
|
||||||
|
struct config_file *cf;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct list *_get_configs(struct pool *mem, const char *dir)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void _put_configs(struct pool *mem, struct list *configs)
|
||||||
|
{
|
||||||
|
struct list *cfh;
|
||||||
|
struct config_list *cl;
|
||||||
|
|
||||||
|
list_iterate(cfh, configs) {
|
||||||
|
cl = list_item(cfh, struct config_file);
|
||||||
|
destroy_config_file(cl->cf);
|
||||||
|
}
|
||||||
|
|
||||||
|
pool_free(mem, configs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Just returns the vg->name fields
|
||||||
|
struct list *get_vgs(struct format_instance *fi)
|
||||||
|
{
|
||||||
|
struct text_c *tc = (struct text_c *) fi->private;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct list *get_pvs(struct format_instance *fi)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct physical_volume *pv_read(struct format_instance *fi,
|
||||||
|
const char *pv_name)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int pv_setup(struct format_instance *fi, struct physical_volume *pv,
|
||||||
|
struct volume_group *vg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int pv_write(struct format_instance *fi, struct physical_volume *pv)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int vg_setup(struct format_instance *fi, struct volume_group *vg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
struct volume_group *vg_read(struct format_instance *fi, const char *vg_name)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int vg_write(struct format_instance *fi, struct volume_group *vg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroy(struct format_instance *fi)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We don't need to do anything here since
|
||||||
|
* everything is allocated from the pool.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static struct format_handler _text_handler = {
|
||||||
|
get_vgs: _get_vgs,
|
||||||
|
get_pvs: _get_pvs,
|
||||||
|
pv_read: _pv_read,
|
||||||
|
pv_setup: _pv_setup,
|
||||||
|
pv_write: _pv_write,
|
||||||
|
vg_setup: _vg_setup,
|
||||||
|
vg_read: _vg_read,
|
||||||
|
vg_write: _vg_write,
|
||||||
|
destroy: _destroy
|
||||||
|
};
|
||||||
|
|
||||||
|
struct format_instance *text_format_create(struct cmd_context *cmd,
|
||||||
|
const char *dir)
|
||||||
|
{
|
||||||
|
struct format_instance *fi;
|
||||||
|
struct text_c *tc = NULL;
|
||||||
|
|
||||||
|
if (!(tc = pool_zalloc(cmd->mem, sizeof(*tc)))) {
|
||||||
|
stack;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(tc->dir = pool_strdup(cmd->mem, dir))) {
|
||||||
|
stack;
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(fi = pool_alloc(cmd->mem, sizeof(*fi)))) {
|
||||||
|
stack;
|
||||||
|
goto bad;
|
||||||
|
}
|
||||||
|
|
||||||
|
fi->cmd = cmd;
|
||||||
|
fi->ops = _text_handler;
|
||||||
|
fi->private = tc;
|
||||||
|
|
||||||
|
return fi;
|
||||||
|
|
||||||
|
bad:
|
||||||
|
pool_free(mem, tc);
|
||||||
|
return NULL;
|
||||||
|
}
|
13
lib/format_text/format-text.h
Normal file
13
lib/format_text/format-text.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LVM_FORMAT_TEXT_H
|
||||||
|
#define _LVM_FORMAT_TEXT_H
|
||||||
|
|
||||||
|
struct format_instance *text_format_create(struct cmd_context,
|
||||||
|
const char *dir);
|
||||||
|
|
||||||
|
#endif
|
19
lib/format_text/import-export.c
Normal file
19
lib/format_text/import-export.c
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "text-rep.h"
|
||||||
|
|
||||||
|
struct volume_group *text_vg_import(struct pool *mem, struct config_file *cf)
|
||||||
|
{
|
||||||
|
log_err("text_vg_import not implemented yet.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct config_file *text_vg_export(struct pool *mem, struct volume_group *vg)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
13
lib/format_text/import-export.h
Normal file
13
lib/format_text/import-export.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
||||||
|
*
|
||||||
|
* This file is released under the LGPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LVM_TEXT_IMPORT_EXPORT_H
|
||||||
|
#define _LVM_TEXT_IMPORT_EXPORT_H
|
||||||
|
|
||||||
|
struct volume_group *text_vg_import(struct pool *mem, struct config_file *cf);
|
||||||
|
struct config_file *text_vg_export(struct pool *mem, struct volume_group *vg);
|
||||||
|
|
||||||
|
#endif
|
49
lib/format_text/sample.vg
Normal file
49
lib/format_text/sample.vg
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# An example volume group
|
||||||
|
|
||||||
|
vg {
|
||||||
|
id = "ksjdlfksjldskjlsk"
|
||||||
|
name = "sample_volume_group"
|
||||||
|
|
||||||
|
status = [???]
|
||||||
|
|
||||||
|
extent_size = 8192 # 4M
|
||||||
|
extent_count = 1024
|
||||||
|
free_count = 430
|
||||||
|
|
||||||
|
max_lv = 99
|
||||||
|
max_pv = 255
|
||||||
|
|
||||||
|
physical_volumes = ["pv1", "pv2"]
|
||||||
|
logical_volumes = ["lv1", "lv2"]
|
||||||
|
}
|
||||||
|
|
||||||
|
pv1 {
|
||||||
|
id = "lksjdflksdlsk"
|
||||||
|
|
||||||
|
major = 123
|
||||||
|
minor = 23
|
||||||
|
|
||||||
|
status = [???]
|
||||||
|
size = ??
|
||||||
|
|
||||||
|
pe_start = 8192
|
||||||
|
pe_count = 300
|
||||||
|
pe_allocated = 30
|
||||||
|
}
|
||||||
|
|
||||||
|
lv1 {
|
||||||
|
id = "lksdflskj"
|
||||||
|
name = "music"
|
||||||
|
|
||||||
|
status = [???]
|
||||||
|
read_ahead = 1024
|
||||||
|
stripes = 1
|
||||||
|
|
||||||
|
size = ??
|
||||||
|
le_count = 30
|
||||||
|
|
||||||
|
map = ["pv1", 0,
|
||||||
|
"pv2", 1,
|
||||||
|
...
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user