mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Store snapshot and origin sizes separately.
This commit is contained in:
parent
73a9487f33
commit
c45a8a2c1c
@ -1,5 +1,6 @@
|
|||||||
Version 2.01.01 -
|
Version 2.01.01 -
|
||||||
===================================
|
===================================
|
||||||
|
Store snapshot and origin sizes separately.
|
||||||
Update vgcreate man page.
|
Update vgcreate man page.
|
||||||
|
|
||||||
Version 2.01.00 - 17th January 2005
|
Version 2.01.00 - 17th January 2005
|
||||||
|
@ -878,6 +878,7 @@ static int _populate_snapshot(struct dev_manager *dm,
|
|||||||
struct snapshot *s;
|
struct snapshot *s;
|
||||||
struct dev_layer *dlo, *dlc;
|
struct dev_layer *dlo, *dlc;
|
||||||
char devbufo[10], devbufc[10];
|
char devbufo[10], devbufc[10];
|
||||||
|
uint64_t size;
|
||||||
|
|
||||||
if (!(s = find_cow(dl->lv))) {
|
if (!(s = find_cow(dl->lv))) {
|
||||||
log_error("Couldn't find snapshot for '%s'.", dl->lv->name);
|
log_error("Couldn't find snapshot for '%s'.", dl->lv->name);
|
||||||
@ -925,10 +926,10 @@ static int _populate_snapshot(struct dev_manager *dm,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
log_debug("Adding target: 0 %" PRIu64 " snapshot %s",
|
size = (uint64_t) s->le_count * s->origin->vg->extent_size;
|
||||||
s->origin->size, params);
|
|
||||||
if (!dm_task_add_target
|
log_debug("Adding target: 0 %" PRIu64 " snapshot %s", size, params);
|
||||||
(dmt, UINT64_C(0), s->origin->size, "snapshot", params)) {
|
if (!dm_task_add_target(dmt, UINT64_C(0), size, "snapshot", params)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -646,7 +646,7 @@ int import_snapshots(struct pool *mem, struct volume_group *vg,
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* insert the snapshot */
|
/* insert the snapshot */
|
||||||
if (!vg_add_snapshot(org, cow, 1, NULL,
|
if (!vg_add_snapshot(org, cow, 1, NULL, org->le_count,
|
||||||
lvd->lv_chunk_size)) {
|
lvd->lv_chunk_size)) {
|
||||||
log_err("Couldn't add snapshot.");
|
log_err("Couldn't add snapshot.");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -513,7 +513,7 @@ static int _print_snapshot(struct formatter *f, struct snapshot *snap,
|
|||||||
}
|
}
|
||||||
|
|
||||||
seg.le = 0;
|
seg.le = 0;
|
||||||
seg.len = snap->origin->le_count;
|
seg.len = snap->le_count;
|
||||||
seg.origin = snap->origin;
|
seg.origin = snap->origin;
|
||||||
seg.cow = snap->cow;
|
seg.cow = snap->cow;
|
||||||
seg.chunk_size = snap->chunk_size;
|
seg.chunk_size = snap->chunk_size;
|
||||||
|
@ -255,6 +255,7 @@ struct snapshot {
|
|||||||
|
|
||||||
int persistent; /* boolean */
|
int persistent; /* boolean */
|
||||||
uint32_t chunk_size; /* in 512 byte sectors */
|
uint32_t chunk_size; /* in 512 byte sectors */
|
||||||
|
uint32_t le_count;
|
||||||
|
|
||||||
struct logical_volume *origin;
|
struct logical_volume *origin;
|
||||||
struct logical_volume *cow;
|
struct logical_volume *cow;
|
||||||
@ -496,9 +497,9 @@ struct snapshot *find_cow(const struct logical_volume *lv);
|
|||||||
struct snapshot *find_origin(const struct logical_volume *lv);
|
struct snapshot *find_origin(const struct logical_volume *lv);
|
||||||
struct list *find_snapshots(const struct logical_volume *lv);
|
struct list *find_snapshots(const struct logical_volume *lv);
|
||||||
|
|
||||||
int vg_add_snapshot(struct logical_volume *origin,
|
int vg_add_snapshot(struct logical_volume *origin, struct logical_volume *cow,
|
||||||
struct logical_volume *cow,
|
int persistent, struct id *id, uint32_t extent_count,
|
||||||
int persistent, struct id *id, uint32_t chunk_size);
|
uint32_t chunk_size);
|
||||||
|
|
||||||
int vg_remove_snapshot(struct volume_group *vg, struct logical_volume *cow);
|
int vg_remove_snapshot(struct volume_group *vg, struct logical_volume *cow);
|
||||||
|
|
||||||
|
@ -104,9 +104,9 @@ struct list *find_snapshots(const struct logical_volume *lv)
|
|||||||
return snaplist;
|
return snaplist;
|
||||||
}
|
}
|
||||||
|
|
||||||
int vg_add_snapshot(struct logical_volume *origin,
|
int vg_add_snapshot(struct logical_volume *origin, struct logical_volume *cow,
|
||||||
struct logical_volume *cow,
|
int persistent, struct id *id, uint32_t extent_count,
|
||||||
int persistent, struct id *id, uint32_t chunk_size)
|
uint32_t chunk_size)
|
||||||
{
|
{
|
||||||
struct snapshot *s;
|
struct snapshot *s;
|
||||||
struct snapshot_list *sl;
|
struct snapshot_list *sl;
|
||||||
@ -127,6 +127,7 @@ int vg_add_snapshot(struct logical_volume *origin,
|
|||||||
|
|
||||||
s->persistent = persistent;
|
s->persistent = persistent;
|
||||||
s->chunk_size = chunk_size;
|
s->chunk_size = chunk_size;
|
||||||
|
s->le_count = extent_count;
|
||||||
s->origin = origin;
|
s->origin = origin;
|
||||||
s->cow = cow;
|
s->cow = cow;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ static const char *_name(const struct lv_segment *seg)
|
|||||||
static int _text_import(struct lv_segment *seg, const struct config_node *sn,
|
static int _text_import(struct lv_segment *seg, const struct config_node *sn,
|
||||||
struct hash_table *pv_hash)
|
struct hash_table *pv_hash)
|
||||||
{
|
{
|
||||||
uint32_t chunk_size;
|
uint32_t chunk_size, extent_count;
|
||||||
const char *org_name, *cow_name;
|
const char *org_name, *cow_name;
|
||||||
struct logical_volume *org, *cow;
|
struct logical_volume *org, *cow;
|
||||||
|
|
||||||
@ -70,7 +70,11 @@ static int _text_import(struct lv_segment *seg, const struct config_node *sn,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vg_add_snapshot(org, cow, 1, &seg->lv->lvid.id[1], chunk_size)) {
|
if (!get_config_uint32(sn, "extent_count", &extent_count))
|
||||||
|
extent_count = org->le_count;
|
||||||
|
|
||||||
|
if (!vg_add_snapshot(org, cow, 1, &seg->lv->lvid.id[1], extent_count,
|
||||||
|
chunk_size)) {
|
||||||
stack;
|
stack;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -81,6 +85,8 @@ static int _text_import(struct lv_segment *seg, const struct config_node *sn,
|
|||||||
static int _text_export(const struct lv_segment *seg, struct formatter *f)
|
static int _text_export(const struct lv_segment *seg, struct formatter *f)
|
||||||
{
|
{
|
||||||
outf(f, "chunk_size = %u", seg->chunk_size);
|
outf(f, "chunk_size = %u", seg->chunk_size);
|
||||||
|
if (seg->len != seg->origin->le_count)
|
||||||
|
outf(f, "extent_count = %u", seg->len);
|
||||||
outf(f, "origin = \"%s\"", seg->origin->name);
|
outf(f, "origin = \"%s\"", seg->origin->name);
|
||||||
outf(f, "cow_store = \"%s\"", seg->cow->name);
|
outf(f, "cow_store = \"%s\"", seg->cow->name);
|
||||||
|
|
||||||
|
@ -609,7 +609,8 @@ static int _lvcreate(struct cmd_context *cmd, struct lvcreate_params *lp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vg_add_snapshot(org, lv, 1, NULL, lp->chunk_size)) {
|
if (!vg_add_snapshot(org, lv, 1, NULL, lv->le_count,
|
||||||
|
lp->chunk_size)) {
|
||||||
log_err("Couldn't create snapshot.");
|
log_err("Couldn't create snapshot.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user