mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
6472c7e11f
When a mirror is being downconverted in a cluster, a series of suspends and resumes is executed. With the change to using UUIDs in dev_manager instead of names, the behaviour has changed with regards to including an _mlog in the deptree of a logical volume. In the old (pre-UUID-enabled) code, the _mlog would appear in a deptree of any volume purely based on a name match: a linear volume foo would include foo_mlog in its dependencies if that happened to exist. This behaviour was fixed and the mlog is now only included for mirrors. By a coincidence, this mlog bug had been hiding a different bug in clvmd. When a mirror is being dismantled (and converted to a linear volume), it is first suspended as a whole, then later resumed in parts. Nevertheless, the overall memlock balance is maintained in this operation. The problem kicks in, because even though the mirror log was suspended as part of the mirror, when the dismantled mirror is resumed again, it is no longer a mirror and therefore the mirror log stays suspended. This would not be a problem in itself, since _delete_lv (from metadata/mirror.c) is called on it subsequently, which does an activate/deactivate cycle and removes the LV. The activate/deactivate cycle correctly prompts clvmd to resume the device: however, in doing this, it will issue an unpaired resume operation (the suspend that caused the mirror log to be suspended is paired with resuming the dismantled mirror later). We have concluded that the path in clvmd should never affect memlock_count, since there should never be an unmatched explicit suspend preceding this resume. |
||
---|---|---|
.. | ||
clvm.h | ||
clvmd-cman.c | ||
clvmd-command.c | ||
clvmd-common.h | ||
clvmd-comms.h | ||
clvmd-corosync.c | ||
clvmd-gulm.c | ||
clvmd-gulm.h | ||
clvmd-openais.c | ||
clvmd-singlenode.c | ||
clvmd.c | ||
clvmd.h | ||
lvm-functions.c | ||
lvm-functions.h | ||
Makefile.in | ||
refresh_clvmd.c | ||
refresh_clvmd.h | ||
tcp-comms.c | ||
tcp-comms.h |