1
0
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:
Alasdair Kergon 2005-01-19 17:19:39 +00:00
parent 73a9487f33
commit c45a8a2c1c
8 changed files with 26 additions and 15 deletions

View File

@ -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

View File

@ -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;
} }

View File

@ -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;

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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;
} }