Subject: EVMS regions are not deactivated prior to container deportation Package: evms Version: 2.5.1-1 Severity: normal Tags: patch
EVMS 2.5.1 does not deactivate MD regions prior to deporting containers, which can cause the system to hang at shutdown or during cluster failover.
I reported this bug upstream and it was acknowledged by an EVMS developer:
http://marc.theaimsgroup.com/?l=evms-devel&m=111272068321285&w=2
The patch from Steve Dobbelstein is attached. I tested it on the Debian/sarge computer where I first noticed the problem.
-- System Information: Debian Release: 3.1 APT prefers testing APT policy: (990, 'testing'), (500, 'unstable') Architecture: i386 (i686) Kernel: Linux 2.6.10-1-686 Locale: LANG=en_CA, LC_CTYPE=en_CA (charmap=ISO-8859-1_
Versions of packages evms depends on: ii libc6 2.3.2.ds1-20 ii libevms-2.5 2.5.1-1
-- no deconf information
Mark all deleted volumes as needing to be deactivated.
diff -u evms-2.5.1/engine/common.c evms-2.5.1-fix/engine/common.c --- evms-2.5.1/engine/common.c 2004-12-06 11:05:04.000000000 -0600 +++ evms-2.5.1-fix/engine/common.c 2005-04-05 09:32:22.000000000 -0500 @@ -1156,6 +1156,9 @@ if (!(obj->volume->flags & VOLFLAG_NEW)) { /* Put it on the volume_delete_list. */ + if (obj->volume->flags & VOLFLAG_ACTIVE) { + obj->volume->flags |= VOLFLAG_NEEDS_DEACTIVATE; + } el = insert_thing(&volume_delete_list, obj->volume, INSERT_AFTER, diff -u evms-2.5.1/engine/internalAPI.c evms-2.5.1-fix/engine/internalAPI.c --- evms-2.5.1/engine/internalAPI.c 2005-01-05 17:38:58.000000000 -0600 +++ evms-2.5.1-fix/engine/internalAPI.c 2005-04-05 09:46:07.000000000 -0500 @@ -2614,6 +2614,9 @@ list_element_t el; LOG_DEBUG("Volume exists. Put it on the delete list.\n"); + if (vol->flags & VOLFLAG_ACTIVE) { + vol->flags |= VOLFLAG_NEEDS_DEACTIVATE; + } el = insert_thing(&volume_delete_list, vol, INSERT_AFTER, Only in evms-2.5.1-fix/engine/: internalAPI.c~ diff -u evms-2.5.1/engine/volume.c evms-2.5.1-fix/engine/volume.c --- evms-2.5.1/engine/volume.c 2005-01-05 17:40:00.000000000 -0600 +++ evms-2.5.1-fix/engine/volume.c 2005-04-05 09:29:10.000000000 -0500 @@ -2174,6 +2174,9 @@ vol->flags &= ~VOLFLAG_UNMKFS; /* Delete the old volume. */ + if (vol->flags & VOLFLAG_ACTIVE) { + vol->flags |= VOLFLAG_NEEDS_DEACTIVATE; + } el = insert_thing(&volume_delete_list, vol, INSERT_AFTER, @@ -2438,6 +2441,11 @@ */ rc = vol->object->plugin->functions.plugin->add_sectors_to_kill_list(vol->object, vol->object->size - (EVMS_FEATURE_HEADER_SECTORS * 2), EVMS_FEATURE_HEADER_SECTORS * 2); + /* Deactivate the volume if it is active. */ + if (vol->flags & VOLFLAG_ACTIVE) { + vol->flags |= VOLFLAG_NEEDS_DEACTIVATE; + } + } else { /* * The old volume was not inserted into the Common subdirectories: evms-2.5.1/engine/worker and evms-2.5.1-fix/engine/worker