mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
thin: fix forbidden discards checks
Instead of check for lv_is_active() for thin pool LV, query the whole pool via new pool_is_active(). Fixes a problem when we cannot change discards settings for active pool device where the actual layer for pool device was inactive, but thin volumes using thin pool have been active.
This commit is contained in:
parent
11eaf1c98c
commit
a5b9b4bf02
@ -1,5 +1,6 @@
|
||||
Version 2.02.99 -
|
||||
===================================
|
||||
Fix check for some forbidden discards conversion of thin pools.
|
||||
Add pool_is_active() to check for any pool related active LV.
|
||||
Report blank field if the LV doesn't have an origin instead of 0.
|
||||
Do not take a free lv name argument for lvconvert --thinpool option.
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
|
||||
# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# This copyrighted material is made available to anyone wishing to use,
|
||||
# modify, copy, or redistribute it subject to the terms and conditions
|
||||
@ -34,16 +34,30 @@ check lv_field $vg/pool2 discards "passdown"
|
||||
|
||||
lvchange --discards nopassdown $vg/pool2
|
||||
|
||||
# cannot convert active ignore -> passdown
|
||||
lvcreate -V1M -n origin -T $vg/pool
|
||||
lvcreate -s $vg/origin -n snap
|
||||
|
||||
# Cannot convert active nopassdown -> ignore
|
||||
not lvchange --discards nopassdown $vg/pool
|
||||
|
||||
# Cannot convert active ignore -> passdown
|
||||
not lvchange --discards passdown $vg/pool
|
||||
|
||||
# cannot convert active nopassdown -> ignore
|
||||
# Cannot convert active nopassdown -> ignore
|
||||
not lvchange --discards ignore $vg/pool1
|
||||
|
||||
# deactivate
|
||||
# Deactivate pool only
|
||||
lvchange -an $vg/pool $vg/pool1
|
||||
|
||||
# Cannot convert, since thin volumes are still active
|
||||
not lvchange --discards passdown $vg/pool
|
||||
|
||||
# Deactive thin volumes
|
||||
lvchange -an $vg/origin $vg/snap
|
||||
|
||||
lvchange --discards passdown $vg/pool
|
||||
check lv_field $vg/pool discards "passdown"
|
||||
|
||||
lvchange --discards ignore $vg/pool1
|
||||
check lv_field $vg/pool1 discards "ignore"
|
||||
|
||||
|
@ -113,9 +113,9 @@ static int lvchange_pool_update(struct cmd_context *cmd,
|
||||
if (discards != first_seg(lv)->discards) {
|
||||
if (((discards == THIN_DISCARDS_IGNORE) ||
|
||||
(first_seg(lv)->discards == THIN_DISCARDS_IGNORE)) &&
|
||||
lv_is_active(lv))
|
||||
pool_is_active(first_seg(lv)))
|
||||
log_error("Cannot change discards state for active "
|
||||
"logical volume \"%s\".", lv->name);
|
||||
"pool volume \"%s\".", lv->name);
|
||||
else {
|
||||
first_seg(lv)->discards = discards;
|
||||
update++;
|
||||
|
Loading…
Reference in New Issue
Block a user