summaryrefslogtreecommitdiffstats
path: root/lib/metadata
diff options
context:
space:
mode:
authorAlasdair Kergon <agk@redhat.com>2011-09-09 01:15:18 +0000
committerAlasdair Kergon <agk@redhat.com>2011-09-09 01:15:18 +0000
commit5081181b5d89886389758cd42adc9b8251da327d (patch)
treeba6ae01db1f8106e282d0f95be7ffb513517614c /lib/metadata
parentdbb48de5078b00aed7f6f77453d435e8b6e45c49 (diff)
downloadlvm2-5081181b5d89886389758cd42adc9b8251da327d.tar.gz
lvm2-5081181b5d89886389758cd42adc9b8251da327d.tar.xz
lvm2-5081181b5d89886389758cd42adc9b8251da327d.zip
Append z to lv_attr if new blocks will be zeroed.
Diffstat (limited to 'lib/metadata')
-rw-r--r--lib/metadata/lv.c10
-rw-r--r--lib/metadata/metadata.h2
-rw-r--r--lib/metadata/thin_manip.c2
3 files changed, 11 insertions, 3 deletions
diff --git a/lib/metadata/lv.c b/lib/metadata/lv.c
index 322727eb..8434e45c 100644
--- a/lib/metadata/lv.c
+++ b/lib/metadata/lv.c
@@ -308,9 +308,10 @@ char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
{
percent_t snap_percent;
struct lvinfo info;
+ struct lv_segment *seg;
char *repstr;
- if (!(repstr = dm_pool_zalloc(mem, 8))) {
+ if (!(repstr = dm_pool_zalloc(mem, 9))) {
log_error("dm_pool_alloc failed");
return 0;
}
@@ -405,6 +406,13 @@ char *lv_attr_dup(struct dm_pool *mem, const struct logical_volume *lv)
else
repstr[6] = '-';
+ if ((lv_is_thin_volume(lv) && (seg = first_seg(lv)) && seg->pool_lv && (seg = first_seg(seg->pool_lv))) ||
+ (lv_is_thin_pool(lv) && (seg = first_seg(lv))) &&
+ seg->zero_new_blocks)
+ repstr[7] = 'z';
+ else
+ repstr[7] = '-';
+
out:
return repstr;
}
diff --git a/lib/metadata/metadata.h b/lib/metadata/metadata.h
index 87e26047..e984ba83 100644
--- a/lib/metadata/metadata.h
+++ b/lib/metadata/metadata.h
@@ -372,7 +372,7 @@ struct pv_list *find_pv_in_pv_list(const struct dm_list *pl,
struct lv_segment *find_seg_by_le(const struct logical_volume *lv, uint32_t le);
/* Find pool LV segment given a thin pool data or metadata segment. */
-struct lv_segment *find_pool_seg(struct lv_segment *seg);
+struct lv_segment *find_pool_seg(const struct lv_segment *seg);
/*
* Remove a dev_dir if present.
diff --git a/lib/metadata/thin_manip.c b/lib/metadata/thin_manip.c
index e8bf48c3..2412db6c 100644
--- a/lib/metadata/thin_manip.c
+++ b/lib/metadata/thin_manip.c
@@ -61,7 +61,7 @@ int detach_pool_lv(struct lv_segment *seg)
return remove_seg_from_segs_using_this_lv(seg->pool_lv, seg);
}
-struct lv_segment *find_pool_seg(struct lv_segment *seg)
+struct lv_segment *find_pool_seg(const struct lv_segment *seg)
{
struct lv_segment *pool_seg;