1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Thin disable snapshot creation when pool is over the threshold.

Since snapshot needs to suspend origin - it might lead to pool userspace
deadlock (as the pool will wait for new space in case it would be overfilled,
but dmeventd would not be able to resize it, as the lvcreate operation would
have kept the VG lock.)
To minimize the risk of such scenario - we prevent to create new snapshot
in case we are over the threshold - but beware, there is still small timewindow,
so keep threshold at some reasonable level!
This commit is contained in:
Zdenek Kabelac 2012-01-19 15:39:41 +00:00
parent e58b5dd8e8
commit f82bddb76c

View File

@ -3996,6 +3996,7 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg, struct l
struct logical_volume *lv, *org = NULL;
struct logical_volume *pool_lv;
struct lv_list *lvl;
percent_t percent;
int origin_active = 0;
struct lvinfo info;
@ -4315,6 +4316,14 @@ static struct logical_volume *_lv_create_an_lv(struct volume_group *vg, struct l
if (seg_is_thin(lp)) {
/* For thin snapshot suspend active thin origin first */
if (org && lv_is_active(org)) {
lv_thin_pool_percent(first_seg(org)->pool_lv, 0, &percent);
percent /= PERCENT_1;
if (percent >= (find_config_tree_int(cmd, "activation/thin_pool_autoextend_threshold",
DEFAULT_THIN_POOL_AUTOEXTEND_THRESHOLD))) {
log_error("Failed to create snapshot, pool is filled over "
"the autoextend threshold (%d%%).", percent);
goto revert_new_lv;
}
if (!suspend_lv(cmd, org)) {
log_error("Failed to suspend thin origin %s.",
org->name);