]> sourceware.org Git - lvm2.git/log
lvm2.git
11 years agoudev: fix pvscan --cache -aay to trigger on relevant events
Peter Rajnoha [Tue, 10 Sep 2013 13:49:05 +0000 (15:49 +0200)]
udev: fix pvscan --cache -aay to trigger on relevant events

This patch fixes the way the special devices are handled
(special in this context means that they're not usable
after the usual ADD event like other generic devices):

  - DM and MD devices are pvscanned only when they are just set up.
    This is the first CHANGE event that makes the device  usable
    (the DM_UDEV_PRIMARY_SOURCE_FLAG is set for DM and the
     md/array_state sysfs attribute is present for MD).
    Whether the device is activated is remembered via
    DM_ACTIVATED (for DM) and LVM_MD_PV_ACTIVATED (for MD)
    udev environment variable. This is then used to decide
    whether we should fire the pvscan on ADD event to
    support coldplugging. For any (artificial) ADD event
    generated during coldplug, the device must be already
    set up properly to fire the pvscan on it.

  - Similar for loop devices. For loop devices, only CHANGE
    events are relevant (so there's a CHANGE after the loop
    device is set up as well as detached). Whether the loop
    has just been activated is detected via loop/backing_file
    sysfs attribute presence. The activation state is remembered
    via LVM_LOOP_PV_ACTIVATED udev environment variable.

  - Do not pvscan multipath device components (underlying paths).

  - Do not pvscan RAID device components.

  - Also, set LVM_SCANNED="1" udev environment variable for
    debug purposes (it's visible in the lvmdump -u that takes
    the current udev database). This variable is set once
    the pvscan is triggered.

The table below summarises when the pvscan is triggered
(marked with X, X* means fire only if the special dev is properly set up):

      | real ADD | real CHANGE | artificial ADD | artificial CHANGE | remove
=============================================================================
DM    |          |      X      |       X*       |                   |   X
MD    |          |      X      |       X*       |                   |
loop  |          |      X      |       X*       |                   |
other |    X     |             |       X        |                   |   X

11 years agoudev: DM_ID_FS_TYPE should be ID_FS_TYPE when comparing with old value
Peter Rajnoha [Tue, 10 Sep 2013 10:38:18 +0000 (12:38 +0200)]
udev: DM_ID_FS_TYPE should be ID_FS_TYPE when comparing with old value

11 years agoMisc/RAID: Enable resume_lv to handle some renaming conflicts.
Jonathan Brassow [Mon, 9 Sep 2013 20:07:28 +0000 (15:07 -0500)]
Misc/RAID: Enable resume_lv to handle some renaming conflicts.

When images and their associated metadata are removed from a RAID1 LV,
the remaining sub-LVs are "shifted" down to fill the gaps.  For
example, if there is a 3-way mirror:
[0][1][2]
and we remove device#0, the devices will be shifted down
[1][2]
and renamed.
[0][1]

This can create a problem for resume_lv (specifically,
dm_tree_activate_children) during the renaming process though.  This
is because it will attempt to rename the higher indexed sub-LVs first
and find that it cannot because there are currently other sub-LVs with
that name.  The solution is to check for a conflicting name before
attempting to rename.  If a conflict is found and that conflicting
sub-LV is also in the process of renaming, we can defer the current
rename until the conflicting sub-LV has renamed and cleared the
conflict.

Now that resume_lv can handle these types of rename conflicts, we can
remove the workaround in RAID that was attempting to resume a RAID1
LV from the bottom-up in order to force a proper rename in assending
order before attempting a resume on the top-level LV.  This "hack"
only worked for single machine use-cases of LVM.  Clearing this up
paves the way for exclusive activation of RAID LVs in a cluster.

11 years agoudev: also inform lvmetad about lost LVM1 PV label
Peter Rajnoha [Mon, 9 Sep 2013 11:47:25 +0000 (13:47 +0200)]
udev: also inform lvmetad about lost LVM1 PV label

Addendum to 4d3b5724e0b51782000a45027de00e0fed1c9833
which covered only LVM2 PV labels.

11 years agocleanup: drop within comment gcc warning
Zdenek Kabelac [Mon, 9 Sep 2013 10:15:48 +0000 (12:15 +0200)]
cleanup: drop within comment gcc warning

toollib.c:69:24: warning: "/*" within comment

11 years agotest: timeout when no write happens since last written line
Zdenek Kabelac [Mon, 9 Sep 2013 10:14:00 +0000 (12:14 +0200)]
test: timeout when no write happens since last written line

Change current test abort after 3 minutes, to abort after 3 minutes
without written output line.

11 years agodeactivate: drop readahead calc in deactivation
Zdenek Kabelac [Sat, 7 Sep 2013 00:48:19 +0000 (02:48 +0200)]
deactivate: drop readahead calc in deactivation

Skip readahead when device will be deactivated.

11 years agothin: validation catch multiseg thin pool/volumes
Zdenek Kabelac [Fri, 6 Sep 2013 12:07:39 +0000 (14:07 +0200)]
thin: validation catch multiseg thin pool/volumes

Multisegment thin pools and volumes are not supported.
Catch such error code path early.

11 years agothin: fix monitoring of thin pool volume
Zdenek Kabelac [Sat, 7 Sep 2013 00:46:48 +0000 (02:46 +0200)]
thin: fix monitoring of thin pool volume

Properly skip unmonitoring of thin pool volume in deactivation code
path. Code makes sure if there is just any thin pool user
it stays monitored with all its resources.

11 years agothin: fix resize of stacked thin pool volume
Zdenek Kabelac [Fri, 6 Sep 2013 08:54:50 +0000 (10:54 +0200)]
thin: fix resize of stacked thin pool volume

When the pool is created from non-linear target the more complex rules
have to be used and stacking needs to properly decode args for _tdata
LV. Also proper allocation policies are being used according to those
set in lvm2 metadata for data and metadata LVs.

Also properly check for active pool and extra code to active it
temporarily.

With this fix it's now possible to use:

lvcreate -L20 -m2 -n pool vg  --alloc anywhere
lvcreate -L10 -m2 -n poolm vg --alloc anywhere
lvconvert --thinpool vg/pool --poolmetadata vg/poolm

lvresize -L+10 vg/pool

11 years agotest: Add the 64b fc17 kernel to the mirror recovery blacklist.
Petr Rockai [Fri, 6 Sep 2013 14:35:49 +0000 (16:35 +0200)]
test: Add the 64b fc17 kernel to the mirror recovery blacklist.

11 years agotoollib: tweak background forking
Alasdair G Kergon [Fri, 6 Sep 2013 00:49:43 +0000 (01:49 +0100)]
toollib: tweak background forking

Log what is forked and replace #if 1 with DEBUG_CHILD.

11 years agologging: Write Completed message before resetting.
Alasdair G Kergon [Fri, 6 Sep 2013 00:47:41 +0000 (01:47 +0100)]
logging: Write Completed message before resetting.

11 years agotools: Use backgroundfork_ARG for pvscan -b
Alasdair G Kergon [Fri, 6 Sep 2013 00:43:24 +0000 (01:43 +0100)]
tools: Use backgroundfork_ARG for pvscan -b

Change pvscan -b to use a new backgroundfork_ARG instead of
background_ARG so as not to affect pvmove -b and lvconvert -b.

11 years agotest: Include tests that timed out in the final summary.
Petr Rockai [Wed, 4 Sep 2013 14:20:35 +0000 (16:20 +0200)]
test: Include tests that timed out in the final summary.

11 years agopvmove: Skip pvmove of RAID, thin, snapshot, origin, and mirror LVs in cluster
Jonathan Brassow [Tue, 3 Sep 2013 18:17:01 +0000 (13:17 -0500)]
pvmove: Skip pvmove of RAID, thin, snapshot, origin, and mirror LVs in cluster

pvmove of the above types should only have been enabled in single machine
mode.

11 years agotest: Fix a spurious failure in skip_if_mirror_recovery_broken.
Petr Rockai [Tue, 3 Sep 2013 18:05:22 +0000 (20:05 +0200)]
test: Fix a spurious failure in skip_if_mirror_recovery_broken.

11 years agoTEST: pvmove-all-segtypes.sh should not be run in a cluster
Jonathan Brassow [Tue, 3 Sep 2013 15:51:21 +0000 (10:51 -0500)]
TEST: pvmove-all-segtypes.sh should not be run in a cluster

11 years agoreinstate: commit 82d83a01ce2cac77fec2e9b763061fbfb5f01ce8
Peter Rajnoha [Tue, 3 Sep 2013 14:45:18 +0000 (16:45 +0200)]
reinstate: commit 82d83a01ce2cac77fec2e9b763061fbfb5f01ce8

It now works as supposed. The source of the problem is fixed
by previous commit d2d6a9da52e04f28e1916bcea3f9fda356b6df29.

11 years agotools: add -b/--background for pvscan --cache -aay
Peter Rajnoha [Tue, 3 Sep 2013 14:06:16 +0000 (16:06 +0200)]
tools: add -b/--background for pvscan --cache -aay

Udev daemon has recently introduced a limit on the number of udev
processes (there was no limit before). This causes a problem
when calling pvscan --cache -aay in lvmetad udev rules which
is supposed to activate the volumes. This activation is itself
synced with udev and so it waits for the activation to complete
before the pvscan finishes. The event processing can't continue
until this pvscan call is finished.

But if we're at the limit with the udev process count, we can't
instatiate any more udev processes, all such events are queued
and so we can't process the lvm activation event for which the
pvscan is waiting.

Then we're in a deadlock since the udev process with the
pvscan --cache -aay call waits for the lvm activation udev
processing to complete, but that will never happen as there's
this limit hit with the number of udev processes.

The process with pvscan --cache -aay actually times out eventually
(3min or 30sec, depends on the version of udev).

This patch makes it possible to run the pvscan --cache -aay
in the background so the udev processing can continue and hence
we can avoid the deadlock mentioned above.

11 years agotest: Skip tests involving mirror recovery on known bad kernels.
Petr Rockai [Tue, 3 Sep 2013 13:49:14 +0000 (15:49 +0200)]
test: Skip tests involving mirror recovery on known bad kernels.

11 years agopvscan: show -aay with --cache for help
Peter Rajnoha [Tue, 3 Sep 2013 07:51:30 +0000 (09:51 +0200)]
pvscan: show -aay with --cache for help

11 years agorevert: commit 82d83a01ce2cac77fec2e9b763061fbfb5f01ce8
Peter Rajnoha [Mon, 2 Sep 2013 11:46:49 +0000 (13:46 +0200)]
revert: commit 82d83a01ce2cac77fec2e9b763061fbfb5f01ce8

The commit 82d83a01ce2cac77fec2e9b763061fbfb5f01ce8
"autoactivation: refresh existing VG before autoactivation"
causes problems (dangling udev_sync cookies, slow processing
of the pvscan --cache --major --minor call from udev rules)
when the autoactivation handler is run in parallel on
several PVs that belong to the same VG. Revert this patch
until the exact source of the problem is found and then
properly fixed and handled.

11 years agotests: test pvmove behavior after restart
Zdenek Kabelac [Fri, 30 Aug 2013 12:53:57 +0000 (14:53 +0200)]
tests: test pvmove behavior after restart

Simulate crash of the system and restarted pvmove after next VG
activation.

Test is catching regression introduced in 2.02.99 for partial tree
creation changes.

11 years agotests: add delay_dev
Zdenek Kabelac [Fri, 30 Aug 2013 12:50:58 +0000 (14:50 +0200)]
tests: add delay_dev

Function to create slower responsive device.

Useful for testing things which needs to happen something during on
going operation - with  'delayed' device - much smaller sizes of devices
are needed and its much more deterministic (though still not optimal)

11 years agolibdm: new name can't be empty
Zdenek Kabelac [Fri, 30 Aug 2013 12:46:34 +0000 (14:46 +0200)]
libdm: new name can't be empty

Do not allow passing '' names to kernel.

This test was missing also in kernel, so it has allowed
to create device with '' name.  This then confused dmsetup tool,
since such name is unexpected and unsupported. To remove
such name from table, user has to use -j -m to specify which device
should be removed.

This patch fixes the posibility to run this operation:

dmsetup rename existingdev ''

after this operation commands like  'dmsetup table' are failing.
This patch prohibits to use such name.

11 years agotest: fix process-each-duplicate-vgnames
David Teigland [Fri, 30 Aug 2013 16:45:12 +0000 (11:45 -0500)]
test: fix process-each-duplicate-vgnames

After enable_dev, the following commands were not
consistently seeing the pv on it.

Alasdair explained, "whenever enabling/disabling devs
outside the tools (and you aren't trying to test how
the tools cope with suddenly appearing/disappering
devices) use "vgscan""

11 years agoman: lvmdump -u -l
Peter Rajnoha [Thu, 29 Aug 2013 12:20:57 +0000 (14:20 +0200)]
man: lvmdump -u -l

11 years agotoolcontext: Only reopen stdin if readable.
Alasdair G Kergon [Wed, 28 Aug 2013 22:55:14 +0000 (23:55 +0100)]
toolcontext: Only reopen stdin if readable.

Don't fail when running lvm commands under versions of nohup that set
up stdin as O_WRONLY!

11 years agoactivation: Fix segfault with inactive pvmove LV.
Alasdair G Kergon [Wed, 28 Aug 2013 21:56:23 +0000 (22:56 +0100)]
activation: Fix segfault with inactive pvmove LV.

Set flag to avoid recursion back through an inactive pvmove LV when
populating deptree.

11 years agosystemd: lvm2-activation-generator: remove default dir if args not specified and...
Peter Rajnoha [Wed, 28 Aug 2013 14:06:51 +0000 (16:06 +0200)]
systemd: lvm2-activation-generator: remove default dir if args not specified and require all args to be given

Remove default "/tmp" as destination directory if no args
specified for lvm2-activation-generator. Require all the
args to be specified directly for proper functionality.

11 years agoman: lvmdump: add doc for -l and -u
Peter Rajnoha [Wed, 28 Aug 2013 12:57:34 +0000 (14:57 +0200)]
man: lvmdump: add doc for -l and -u

11 years agotest: Set the timeout to 3 minutes (was 5s accidentally).
Petr Rockai [Fri, 23 Aug 2013 16:11:22 +0000 (18:11 +0200)]
test: Set the timeout to 3 minutes (was 5s accidentally).

11 years agotest: Add a new "check_full" target, which also tests with real /dev.
Petr Rockai [Fri, 23 Aug 2013 08:09:23 +0000 (10:09 +0200)]
test: Add a new "check_full" target, which also tests with real /dev.

The original "check" target stays confined to a local device directory, while
check_full does 6 flavours, 3 with a local device directory and 3 with the
global /dev directory (the latter are prefixed with "s" for
"system"). I.e.: normal, cluster, lvmetad, snormal, scluster, slvmetad.

11 years agotest: Check for flavoured variables earlier.
Petr Rockai [Fri, 23 Aug 2013 08:06:14 +0000 (10:06 +0200)]
test: Check for flavoured variables earlier.

This is necessary to make LVM_TEST_DEVDIR flavourable, and in turn have flavours
that use the global /dev (which can in turn be managed by udev).

11 years agotest: Remove a redundant drain() from the timeout path.
Petr Rockai [Mon, 5 Aug 2013 19:12:39 +0000 (21:12 +0200)]
test: Remove a redundant drain() from the timeout path.

11 years agotest: Make timeouts a little more robust & verbose.
Petr Rockai [Mon, 5 Aug 2013 19:11:49 +0000 (21:11 +0200)]
test: Make timeouts a little more robust & verbose.

11 years agoTEST: Add a timeout to the harness, killing tests after 2 minutes.
Petr Rockai [Tue, 23 Jul 2013 09:42:34 +0000 (11:42 +0200)]
TEST: Add a timeout to the harness, killing tests after 2 minutes.

11 years agoTEST: Add tests for lvchange actions of RAID under thin
Jonathan Brassow [Tue, 27 Aug 2013 21:46:40 +0000 (16:46 -0500)]
TEST: Add tests for lvchange actions of RAID under thin

Patch includes RAID1,4,5,6,10 tests for:
- setting writemostly/writebehind
* syncaction changes (i.e. scrubbing operations)
- refresh (i.e. reviving devices after transient failures)
- setting recovery rate (sync I/O throttling)
while the RAID LVs are under a thin-pool (both data and metadata)

* not fully tested because I haven't found a way to force bad
  blocks to be noticed in the testsuite yet.  Works just fine
  when dealing with "real" devices.

11 years agotest: pvmove tests for all the different segment types.
Jonathan Brassow [Mon, 26 Aug 2013 21:38:54 +0000 (16:38 -0500)]
test: pvmove tests for all the different segment types.

Test moving linear, mirror, snapshot, RAID1,5,10, thinpool, thin
and thin on RAID.  Perform the moves along with a dummy LV and
also without the dummy LV by specifying a logical volume name as
an argument to pvmove.

11 years agopvmove: Allow moving snapshot/origin. Disallow converting and merging LVs
Jonathan Brassow [Mon, 26 Aug 2013 21:36:30 +0000 (16:36 -0500)]
pvmove:  Allow moving snapshot/origin.  Disallow converting and merging LVs

The patch allows the user to also pvmove snapshots and origin logical
volumes.  This means pvmove should be able to move all segment types.
I have, however, disallowed moving converting or merging logical volumes.

11 years agopvmove: Fix inability to specify LV name when moving RAID, mirror, or thin LV
Jonathan Brassow [Mon, 26 Aug 2013 19:12:31 +0000 (14:12 -0500)]
pvmove: Fix inability to specify LV name when moving RAID, mirror, or thin LV

Top-level LVs (like RAID, mirror or thin) are ignored when determining which
portions of an LV to pvmove.  If the user specified the name of an LV to
move and it was one of the above types, it would be skipped.  The code would
never move on to check whether its sub-LVs needed moving because their names
did not match what the user specified.

The solution is to check whether a sub-LVs is part of the LV whose name was
specified by the user - not just if there was a name match.

11 years agoWHATS_NEW: for 4d3b5724e0b51782000a45027de00e0fed1c9833
Peter Rajnoha [Mon, 26 Aug 2013 13:52:15 +0000 (15:52 +0200)]
WHATS_NEW: for 4d3b5724e0b51782000a45027de00e0fed1c9833

11 years agoudev: inform lvmetad about lost PV label
Peter Rajnoha [Mon, 26 Aug 2013 13:27:00 +0000 (15:27 +0200)]
udev: inform lvmetad about lost PV label

In stacked environment where we have a PV layered on top of a
snapshot LV and then removing the LV, lvmetad still keeps information
about the PV:

[0] raw/~ $ pvcreate /dev/sda
  Physical volume "/dev/sda" successfully created
[0] raw/~ $ vgcreate vg /dev/sda
  Volume group "vg" successfully created
[0] raw/~ $ lvcreate -L32m vg
  Logical volume "lvol0" created
[0] raw/~ $ lvcreate -L32m -s vg/lvol0
  Logical volume "lvol1" created
[0] raw/~ $ pvcreate /dev/vg/lvol1
  Physical volume "/dev/vg/lvol1" successfully created
[0] raw/~ $ lvremove -ff vg/lvol1
  Logical volume "lvol1" successfully removed
[0] raw/~ $ pvs
  No device found for PV BdNlu2-7bHV-XcIp-mFFC-PPuR-ef6K-yffdzO.
  PV         VG         Fmt  Attr PSize   PFree
  /dev/sda   vg         lvm2 a--  124.00m 92.00m
[0] raw/~ $ pvscan --cache --major 253 --minor 3
  Device 253:3 not found. Cleared from lvmetad cache.

This is because of the reactivation that is done just before
snapshot removal as part of the process (vg/lvol1 from the example above).
This causes a CHANGE event to be generated, but any scan done
on the LV does not see the original data anymore (in this case
the stacked PV label on top) and consequently the ID_FS_TYPE="LVM2_member"
(provided by blkid scan) is not stored in udev db anymore for the LV.
Consequently, the pvscan --cache is not run anymore as the dev is not
identified as LVM PV by the "LVM2_member" id - lvmetad loses this info
and still keeps records about the PV.

We can run into a very similar problem with erasing the PV label directly:

[0] raw/~ $ lvcreate -L32m vg
  Logical volume "lvol0" created
[0] raw/~ $ pvcreate /dev/vg/lvol0
  Physical volume "/dev/vg/lvol0" successfully created
[0] raw/~ $ dd if=/dev/zero of=/dev/vg/lvol0 bs=1M
dd: error writing '/dev/vg/lvol0': No space left on device
33+0 records in
32+0 records out
33554432 bytes (34 MB) copied, 0.380921 s, 88.1 MB/s
[0] raw/~ $ pvs
  PV            VG         Fmt  Attr PSize   PFree
  /dev/sda      vg         lvm2 a--  124.00m 92.00m
  /dev/vg/lvol0            lvm2 a--   32.00m 32.00m
[0] raw/~ $ pvscan --cache --major 253 --minor 2
  No PV label found on /dev/vg/lvol0.

This patch adds detection of this change from ID_FS_LABEL="LVM2_member"
to ID_FS_LABEL="<whatever_else>" and hence informing the lvmetad
about PV being gone.

11 years agothin: support lvchange for data and metadata
Zdenek Kabelac [Fri, 9 Aug 2013 23:13:27 +0000 (01:13 +0200)]
thin: support lvchange for data and metadata

Support lvchange operation on stacked thin pool data and metadata
volumes.

11 years agotest: add process-each-vg and process-each-lv
David Teigland [Fri, 23 Aug 2013 19:38:48 +0000 (14:38 -0500)]
test: add process-each-vg and process-each-lv

These test the toollib functions that select
vgs/lvs to process based on command line args:
empty, vg name(s), lv names(s), vg tag(s),
lv tags(s), and combinations of all.

11 years agotest: add process-each-duplicate-vgnames
David Teigland [Wed, 21 Aug 2013 22:53:04 +0000 (17:53 -0500)]
test: add process-each-duplicate-vgnames

Test that vgs shows both vgs when two vgs
exist with the same name but different uuids.

11 years agotest: add vg-name-from-env
David Teigland [Thu, 22 Aug 2013 20:32:04 +0000 (15:32 -0500)]
test: add vg-name-from-env

vg name should come from env var LVM_VG_NAME
for commands that take vg name and lv name,
but vg name is not specified on command line.

11 years agomisc: make lv_is_on_pv use for_each_sub_lv to walk LV tree
Jonathan Brassow [Fri, 23 Aug 2013 16:03:28 +0000 (11:03 -0500)]
misc: make lv_is_on_pv use for_each_sub_lv to walk LV tree

Make lv_is_on_pv use for_each_sub_lv to walk the LV tree.  This
reduces code duplication.

11 years agopvmove: Ability to move thin volumes
Jonathan Brassow [Fri, 23 Aug 2013 14:13:14 +0000 (09:13 -0500)]
pvmove: Ability to move thin volumes

The previous commit was missing the code to allow moving thin
volumes.

11 years agopvmove: Add support for RAID, mirror, and thin
Jonathan Brassow [Fri, 23 Aug 2013 13:57:16 +0000 (08:57 -0500)]
pvmove: Add support for RAID, mirror, and thin

This patch allows pvmove to operate on RAID, mirror and thin LVs.
The key component is the ability to avoid moving a RAID or mirror
sub-LV onto a PV that already has another RAID sub-LV on it.
(e.g. Avoid placing both images of a RAID1 LV on the same PV.)

Top-level LVs are processed to determine which PVs to avoid for
the sake of redundancy, while bottom-level LVs are processed
to determine which segments/extents to move.

This approach does have some drawbacks.  By eliminating whole PVs
from the allocation list, we might miss the opportunity to perform
pvmove in some senarios.  For example, if we have 3 devices and
a linear uses half of the first, a RAID1 uses half of the first and
half of the second, and a linear uses half of the third (FIGURE 1);
we should be able to pvmove the first device (FIGURE 2).
FIGURE 1:
        [ linear ] [ -RAID- ] [ linear ]
        [ -RAID- ] [        ] [        ]

FIGURE 2:
        [  moved ] [ -RAID- ] [ linear ]
        [  moved ] [ linear ] [ -RAID- ]
However, the approach we are using would eliminate the second
device from consideration and would leave us with too little space
for allocation.  In these situations, the user does have the ability
to specify LVs and move them one at a time.

11 years agoThin: Make 'lv_is_on_pv(s)' work with thin types
Jonathan Brassow [Fri, 23 Aug 2013 13:49:16 +0000 (08:49 -0500)]
Thin: Make 'lv_is_on_pv(s)' work with thin types

The pool metadata LV must be accounted for when determining what PVs
are in a thin-pool.  The pool LV must also be accounted for when
checking thin volumes.

This is a prerequisite for pvmove working with thin types.

11 years agoMisc: Make get_pv_list_for_lv() available to more than just RAID
Jonathan Brassow [Fri, 23 Aug 2013 13:40:13 +0000 (08:40 -0500)]
Misc: Make get_pv_list_for_lv() available to more than just RAID

The function 'get_pv_list_for_lv' will assemble all the PVs that are
used by the specified LV.  It uses 'for_each_sub_lv' to traverse all
of the sub-lvs which may compose it.

11 years agoconf: more comments about use_lvmetad + autoactivation relation
Peter Rajnoha [Thu, 22 Aug 2013 06:26:35 +0000 (08:26 +0200)]
conf: more comments about use_lvmetad + autoactivation relation

11 years agosystemd: lvm2-activation-generator: report only error otherwise be silent
Peter Rajnoha [Thu, 22 Aug 2013 06:14:11 +0000 (08:14 +0200)]
systemd: lvm2-activation-generator: report only error otherwise be silent

Do not print success status for lvm2-activation-generator:

  "LVM: Activation generator successfully completed."
  "LVM: Logical Volume autoactivation enabled." (if use_lvmetad=1)

Though this information is quite useful during boot, it may
be confusing for users if it happens anytime later and it
actually happens if systemd reloads. This is usually on package
update to update the systemd state and load any new units that are
newly installed in the system. The systemd reload is global and
so any existing generators are rerun at that moment too.

11 years agofilter-mpath: remove superfluous error message about mpath major not equal to dm...
Peter Rajnoha [Wed, 21 Aug 2013 12:07:01 +0000 (14:07 +0200)]
filter-mpath: remove superfluous error message about mpath major not equal to dm major

This is a regression caused by commit 3bd90488545a4ad5374b4e0f1daba6cf16ae6ae8.
The error message added with that commit "mpath major %d is not dm major %d" is
superfluous.

When scanning for mpath components, we're looking for a parent device.
But this parent device is not necessarily an mpath device (so the dm device)
if it exists - it can be any other device layered on top (e.g. an MD RAID device).

11 years agocmirrord: Prevent secondary checkpoints from corrupting bitmaps
Jonathan Brassow [Tue, 20 Aug 2013 18:21:09 +0000 (13:21 -0500)]
cmirrord: Prevent secondary checkpoints from corrupting bitmaps

The bug addressed by this patch manifested itself during testing
by showing a mirror that never became 'in-sync' after creation.
The bug is isolated to distributions that do not have support
for openAIS checkpointing (i.e. > RHEL6, > F16).

When a node joins a group that is managing a mirror log, the other
machines in the group send it a checkpoint representing the current
state of the bitmap.  More than one machine can send a checkpoint,
but only the initial one should be imported.  Once the bitmap state
has been imported from the initial checkpoint, operations (such
as resync, mark, and clear operations) can begin.  When subsequent
checkpoints are allowed to be imported, it has the effect of erasing
all the log operations between the initial checkpoint and the ones
that follow.

When cmirrord was updated to handle the absence of openAIS
checkpointing (commit 62e38da133d9801cdf36b0f2aaec615ce14b9000),
the new import_checkpoint() function failed to honor the 'no_read'
parameter.  This parameter was designed to avoid reading all but
the initial checkpoint.  Honoring this parameter has solved the
issue of corrupting bitmap data with secondary checkpoints.

11 years agodumpconfig: also mention profilable type if giving hint about known types
Peter Rajnoha [Mon, 19 Aug 2013 06:32:03 +0000 (08:32 +0200)]
dumpconfig: also mention profilable type if giving hint about known types

11 years agodmsetup: display any message output from kernel
Alasdair G Kergon [Fri, 16 Aug 2013 14:25:39 +0000 (15:25 +0100)]
dmsetup: display any message output from kernel

Recent kernels allow messages to respond with a string.
Add dm_task_get_message_response() to libdevmapper to perform some
basic sanity checks and return this.
Have 'dmsetup message' display any response.

DM statistics will make extensive use of this.

(From Mikulas.)

11 years agoudev: fix lvmetad rules to not ignore loop device configuration
Peter Rajnoha [Fri, 16 Aug 2013 13:45:00 +0000 (15:45 +0200)]
udev: fix lvmetad rules to not ignore loop device configuration

If loop device is first configured on systems where /dev/loop-control
is used to dynamically create the loop device itself, there's an
ADD+CHANGE even generated. But next time the existing /dev/loop[0-9]*
is reused, there's only a CHANGE event since the device representing
it is already present in kernel (so no ADD event in this case).

We can't ignore this CHANGE event for loop devices! This is a regression
caused by 756bcabbfe297688ba240a880bc2b55265ad33f0. We already had
a similar problem with MD devices which was fixed by
2ac217d408470dcecb69b83d9cbf7a254747fa5b (but that one was
only an intra-release fix).

11 years agofix: ambiguity in log_sys_error call from previous commit
Peter Rajnoha [Thu, 15 Aug 2013 10:40:47 +0000 (12:40 +0200)]
fix: ambiguity in log_sys_error call from previous commit

libdm-common.c:883:42: warning: pointer/integer type mismatch in conditional expression

define log_sys_error(x, y) log_err("%s%s%s failed: %s", y, *y ? ": " : "", x, strerror(errno))

So the "y" which was 'path ? : "SELinux context reset"' from
previous commit did not quite fit the other "? :" in the log_sys_macro.

11 years agofix: some issues reported by coverity
Peter Rajnoha [Thu, 15 Aug 2013 10:23:49 +0000 (12:23 +0200)]
fix: some issues reported by coverity

  - null_fd resource leak on error path in _reopen_fd_null fn
  - dead code in verify_message in clvmd code
  - dead code in _init_filter_components in toolcontext code
  - null dereference in dm_prepare_selinux_context on error path if
    setfscreatecon fails while resetting SELinux context

11 years agosystemd: use LVM_PATH instead of hardcoded value in activation generator
Michael Stapelberg [Thu, 15 Aug 2013 07:57:30 +0000 (09:57 +0200)]
systemd: use LVM_PATH instead of hardcoded value in activation generator

11 years agolvm2app: lvm_list_pvs_free seg. fault when no PVs
Tony Asleson [Wed, 14 Aug 2013 20:14:42 +0000 (15:14 -0500)]
lvm2app: lvm_list_pvs_free seg. fault when no PVs

When the system has no PVs we don't have access to
the cmd pointer and it remains NULL which causes
a seg. fault when we try to free the VG lock.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agotest: Fix false positives due to open devices
Marian Csontos [Wed, 14 Aug 2013 13:57:52 +0000 (15:57 +0200)]
test: Fix false positives due to open devices

Something is rather randomly keeping devices open. As it is a known udev
feature, waiting for transaction may (or may not) help.

11 years agoautoactivation: refresh existing VG before autoactivation
Peter Rajnoha [Wed, 14 Aug 2013 12:04:58 +0000 (14:04 +0200)]
autoactivation: refresh existing VG before autoactivation

When autoactivating a VG, there could be an existing VG with exactly
the same PV UUIDs. The PVs could be reappeared after previous
loss/disconnect (for example disconnecting and reconnecting iscsi).

Since there's no "autodeactivation" yet, the mappings for the LVs
from the VG were left in the system even if the device was disconnected.
These mappings also hold the major:minor of the underlying device.
So if the device reappears, it is assigned a different major:minor
pair (...and kernel name). We need to cope with this during
autoactivation so any existing mappings are corrected for any changes.
The VG refresh does that (the vgchange --refresh functionality) -
call this before VG autoactivation.

(If the VG does not exist yet, the VG refresh is NOP)

11 years agoWHATS_NEW: for 0da72743ca46ae9f8185cd12d5c78b3c2b801872
Peter Rajnoha [Wed, 14 Aug 2013 08:18:02 +0000 (10:18 +0200)]
WHATS_NEW: for 0da72743ca46ae9f8185cd12d5c78b3c2b801872

11 years agofilters: check for mpath before opening devs
Alasdair G Kergon [Tue, 13 Aug 2013 22:26:58 +0000 (23:26 +0100)]
filters: check for mpath before opening devs

Split out the partitioned device filter that needs to open the device
and move the multipath filter in front of it.

When a device is multipathed, sending I/O to the underlying paths may
cause problems, the most obvious being I/O errors visible to lvm if a
path is down.

Revert the incorrect <backtrace> messages added when a device doesn't
pass a filter.

Log each filter initialisation to show sequence.

Avoid duplicate 'Using $device' debug messages.

11 years agovgck: Fix #894136, notice on-disk corruption in spite of lvmetad.
Petr Rockai [Tue, 13 Aug 2013 21:25:49 +0000 (23:25 +0200)]
vgck: Fix #894136, notice on-disk corruption in spite of lvmetad.

11 years agovgchange: require confirmation with -c and no VGs
Alasdair G Kergon [Tue, 13 Aug 2013 17:20:11 +0000 (18:20 +0100)]
vgchange: require confirmation with -c and no VGs

Too many people have been running 'vgchange -cy' by mistake
so add a confirmation prompt.  Use --yes to bypass this.

11 years agoWHATS_NEW: be more precise
Peter Rajnoha [Tue, 13 Aug 2013 16:25:54 +0000 (18:25 +0200)]
WHATS_NEW: be more precise

11 years agoWHATS_NEW: one more for a85439
Peter Rajnoha [Tue, 13 Aug 2013 16:16:05 +0000 (18:16 +0200)]
WHATS_NEW: one more for a85439

11 years agoblkdeactivate: add support for bind mounts
Peter Rajnoha [Tue, 13 Aug 2013 15:26:36 +0000 (17:26 +0200)]
blkdeactivate: add support for bind mounts

Recent version of util-linux/umount (v2.23+) provides
umount --all-targets that can unmount all the mount targets of
the same device (the bind mounts). Use this if available when
calling the umount blkdeactivate.

Otherwise, for older versions of util-linux, use findmnt
(that is also a part of the util-linux) to iterate over all
mount targets of the same device - this is the manual way.

11 years agoblkdeactivate: change the way blkdeactivate reports status
Peter Rajnoha [Tue, 13 Aug 2013 15:17:25 +0000 (17:17 +0200)]
blkdeactivate: change the way blkdeactivate reports status

The blkdeactivate now suppresses error messages from external
tools that are called. Instead, only a summary message "done"
or "skipped" is issued by blkdeactivate as any error in calling
the external tool (e.g. unmounting or deactivating a device) causes
the device to be skipped and the blkdeactivate continues with the
next device in the tree.

Add new -e/--errors switch to display any error messages from
external tools.

Also, suppress any output given by the external tools and add
new -v/--verbose switch to display it including the verbose
output of the tools called (this will enable error reporting
as well).

Also add blkdeactivate -vv for even more debug (the script's debug).

11 years agopost-release
Alasdair G Kergon [Tue, 13 Aug 2013 10:54:48 +0000 (11:54 +0100)]
post-release

11 years agorelease 2.02.100 v2_02_100
Alasdair G Kergon [Tue, 13 Aug 2013 10:29:21 +0000 (11:29 +0100)]
release 2.02.100

 84 files changed, 1540 insertions(+), 442 deletions(-)

Mostly bug fixes this time.

Also note:
  md raid replaces dm mirroring as the default implementation.
  Can call out to thin_repair to fix thin metadata.
  Improved clvmd error detection/debugging information.

11 years agoMirror: Fix inability to remove VG's cluster flag if it contains a mirror
Jonathan Brassow [Mon, 12 Aug 2013 18:56:47 +0000 (13:56 -0500)]
Mirror: Fix inability to remove VG's cluster flag if it contains a mirror

According to bug 995193, if a volume group
1) contains a mirror
2) is clustered
3) 'locking_type' = 0 is used
then it is not possible to remove the 'c'luster flag from the VG.  This
is due to the way _lv_is_active behaves.

We shouldn't allow the cluster flag to be flipped unless the mirrors in
the cluster are not active.  This is because different kernel modules
are used depending on whether a mirror is cluster or not.  When we
attempt to see if the mirror is active, we first check locally.  If it
is not, then we attempt to check for remotely active instances if the VG
is clustered.  Since the no_lock locking type is LCK_CLUSTERED, but does
not implement 'query_resource', remote_lock_held will always return an
error in this case.  An error from remove_lock_held is treated as though
the lock _is_ held (i.e. the LV is active remotely).  This blocks the
cluster flag from changing.

The solution is to implement 'query_resource' for the no_lock type.  It
will report a message and return 1.  This will allow _lv_is_active to
function properly.  The LV would be considered not active remotely and
the VG can change its flag.

11 years agoRAID: Fix bug making lvchange unable to change recovery rate for RAID
Jonathan Brassow [Mon, 12 Aug 2013 17:40:52 +0000 (12:40 -0500)]
RAID: Fix bug making lvchange unable to change recovery rate for RAID

Commit ID 8615234c0fa331852a11e1bf595bf1d4b858f4bc failed to include
the actual code changes that were made to fix the bug.  Instead, all
tests went in to validate the bug fix.  This patch adds the missing
code changes.

11 years agologging: tidy log_sys_error when string empty
Alasdair G Kergon [Mon, 12 Aug 2013 17:40:41 +0000 (18:40 +0100)]
logging: tidy log_sys_error when string empty

11 years agoWHATSNEW: typo
Jonathan Brassow [Fri, 9 Aug 2013 22:17:53 +0000 (17:17 -0500)]
WHATSNEW: typo

11 years agoRAID: Fix bug making lvchange unable to change recovery rate for RAID
Jonathan Brassow [Fri, 9 Aug 2013 22:09:47 +0000 (17:09 -0500)]
RAID: Fix bug making lvchange unable to change recovery rate for RAID

1) Since the min|maxrecoveryrate args are size_kb_ARGs and they
   are recorded (and sent to the kernel) in terms of kB/sec/disk,
   we must back out the factor multiple done by size_kb_arg.  This
   is already performed by 'lvcreate' for these arguments.
2) Allow all RAID types, not just RAID1, to change these values.
3) Add min|maxrecoveryrate_ARG to the list of 'update_partial_unsafe'
   commands so that lvchange will not complain about needing at
   least one of a certain set of arguments and failing.
4) Add tests that check that these values can be set via lvchange
   and lvcreate and that 'lvs' reports back the proper results.

11 years agotest: can convert pool to external origin
Zdenek Kabelac [Fri, 9 Aug 2013 21:17:15 +0000 (23:17 +0200)]
test: can convert pool to external origin

Test for http://bugzilla.redhat.com/show_bug.cgi?id=983743

11 years agothin: thin pool can't be external origin
Zdenek Kabelac [Fri, 9 Aug 2013 21:04:30 +0000 (23:04 +0200)]
thin: thin pool can't be external origin

Avoid trying to convert thin-pool to external origin.

11 years agoworkaround: gcc v4.8 on 32 bit param. passing bug when -02 opimization used
Peter Rajnoha [Fri, 9 Aug 2013 11:06:17 +0000 (13:06 +0200)]
workaround: gcc v4.8 on 32 bit param. passing bug when -02 opimization used

gcc -O2 v4.8 on 32 bit architecture is causing a bug in parameter
passing. It does not happen with -01 nor -O0.

The problematic part of the code was strlen use in config.c in
the config_def_check fn and the call for _config_def_check_tree in it:

<snip>
  rplen = strlen(rp);
  if (!_config_def_check_tree(handle, vp, vp + strlen(vp), rp, rp + rplen, CFG_PATH_MAX_LEN - rplen, cn, cmd->cft_def_hash)) ...
</snip>

If compiled with -O0 (correct):

Breakpoint 1, config_def_check (cmd=0x819b050, handle=0x81a04f8) at config/config.c:775
(gdb) p vp
$1 = 0x8189ee0 <_cfg_path> "config"
(gdb) p strlen(vp)
$2 = 6
(gdb)
_config_def_check_tree (handle=0x81a04f8, vp=0x8189ee0 <_cfg_path>
"config", pvp=0x8189ee6 <_cfg_path+6> "", rp=0xbfffe1e8 "config",
prp=0xbfffe1ee "", buf_size=58, root=0x81a2568, ht=0x81a65
48) at config/config.c:680
(gdb) p vp
$4 = 0x8189ee0 <_cfg_path> "config"
(gdb) p pvp
$5 = 0x8189ee6 <_cfg_path+6> ""

If compiled with -O2 (incorrect):

Breakpoint 1, config_def_check (cmd=cmd@entry=0x8183050, handle=0x81884f8) at config/config.c:775
(gdb) p vp
$1 = 0x8172fc0 <_cfg_path> "config"
(gdb) p strlen(vp)
$2 = 6
(gdb) p vp + strlen(vp)
$3 = 0x8172fc6 <_cfg_path+6> ""
(gdb)
_config_def_check_tree (handle=handle@entry=0x81884f8, pvp=0x8172fc7
<_cfg_path+7> "host_list", rp=rp@entry=0xbffff190 "config",
prp=prp@entry=0xbffff196 "", buf_size=buf_size@entry=58, ht=0x
818e548, root=0x818a568, vp=0x8172fc0 <_cfg_path> "config") at
config/config.c:674
(gdb) p pvp
$4 = 0x8172fc7 <_cfg_path+7> "host_list"

The difference is in passing the "pvp" arg for _config_def_check_tree.
While in the correct case, the value of _cfg_path+6 is passed
(the result of vp + strlen(vp) - see the snippet of the code above),
in the incorrect case, this value is increased by 1 to _cfg_path+7,
hence totally malforming the string that is being processed.

This ends up with incorrect validation check and incorrect warning
messages are issued like:

 "Configuration setting "config/checks" has invalid type. Found integer, expected section."

To workaround this issue, remove the "static" qualifier from the
"static char _cfg_path[CFG_PATH_MAX_LEN]". This causes the optimalizer
to be less aggressive (also shuffling the arg list for
_config_def_check_tree call helps).

11 years agoWHATS_NEW: entry for 19baf84290186a550b212260144523266350252b
Peter Rajnoha [Thu, 8 Aug 2013 08:04:53 +0000 (10:04 +0200)]
WHATS_NEW: entry for 19baf84290186a550b212260144523266350252b

11 years agoWHATS_NEW: update WHATS_NEW for previous commit
Jonathan Brassow [Wed, 7 Aug 2013 22:51:21 +0000 (17:51 -0500)]
WHATS_NEW: update WHATS_NEW for previous commit

11 years agoMirror: Fix issue preventing PV creation on mirror LVs
Jonathan Brassow [Wed, 7 Aug 2013 22:42:26 +0000 (17:42 -0500)]
Mirror: Fix issue preventing PV creation on mirror LVs

Commit b248ba0a396d7fc9a459eea02cfdc70b33ce3441 attempted to
prevent mirror devices which had a failed device in their
mirrored log from being usable/readable by LVM.  This was to
protect against circular dependancies where one LVM command
could be blocked trying to read one of these affected mirrors
while the LVM command to fix/unblock that mirror was stuck
behind the currently running command.

The above commit went wrong when it used 'device_is_usable()' to
recurse on the mirrored log device to check if it was suspended
or blocked.  The 'device_is_usable' function also contains a check
for reserved names - like *_mlog, etc.  This last check always
triggered when checking a mirror's log simply because of the name,
not because it was suspended or blocked - a false positive.

The solution is to create a new function like 'device_is_usable',
but without the check for reserved names.  Using this new function
(device_is_suspended_or_blocked), we can check the status of a
mirror's log device properly.

11 years agoMirror/RAID1: When up|down-converting default to segtype of current LV
Jonathan Brassow [Wed, 7 Aug 2013 21:01:45 +0000 (16:01 -0500)]
Mirror/RAID1: When up|down-converting default to segtype of current LV

If there is no RAID support in the kernel but the default mirror
segtype is "raid1", converting legacy mirrors can be problematic.
For example, changing the log type or converting a mirror to a linear
LV does not require the RAID modules to be present.  However, because
lp->segtype is set to be RAID1 by the configuration file, the command
fails.

We should only be setting lp->segtype when converting mirrors if it is
going to change (e.g. to linear or between mirror types).

11 years agoTEST: Be explicit about which mirror segment type to use.
Jonathan Brassow [Wed, 7 Aug 2013 20:48:31 +0000 (15:48 -0500)]
TEST: Be explicit about which mirror segment type to use.

In those places where mirrors were being created while assuming
a default segment type of "mirror", we include the '--type mirror'
argument to explicitly set the segment type.  This will preserve
the mirror testing that is performed even though the default
mirroring segment type is now "raid1".

11 years agotests: add profiles.sh test
Peter Rajnoha [Wed, 7 Aug 2013 10:17:36 +0000 (12:17 +0200)]
tests: add profiles.sh test

11 years agoRAID: Make "raid10" the default striped + mirror segment type
Jonathan Brassow [Tue, 6 Aug 2013 19:15:08 +0000 (14:15 -0500)]
RAID: Make "raid10" the default striped + mirror segment type

When both the '-i' and '-m' arguments are specified on the command
line, use the "raid10" segment type.  This way, the native RAID10
personality is used through dm-raid rather than layering a mirror
on striped LVs.  If the old behavior is desired, the '--type'
argument to use would be "mirror" rather than "raid10".

11 years agoRAID: Make "raid1" the default mirror segment type
Jonathan Brassow [Tue, 6 Aug 2013 19:13:55 +0000 (14:13 -0500)]
RAID: Make "raid1" the default mirror segment type

11 years agothin: fix commit e195b5227e624cb125b070b4a10e24efdab16d53
Peter Rajnoha [Tue, 6 Aug 2013 14:28:12 +0000 (16:28 +0200)]
thin: fix commit e195b5227e624cb125b070b4a10e24efdab16d53

Check chunk_size range unconditionally.

11 years agoclogd: fix descriptor leak when daemonzing
Zdenek Kabelac [Tue, 6 Aug 2013 14:08:31 +0000 (16:08 +0200)]
clogd: fix descriptor leak when daemonzing

11 years agoclmvd: fix decriptor leak on restart
Zdenek Kabelac [Tue, 6 Aug 2013 14:07:50 +0000 (16:07 +0200)]
clmvd: fix decriptor leak on restart

Do not leave descriptor used for dup2() openned.

11 years agolibdm: update DM_ABORT_ON_INTERNAL_ERRORS
Zdenek Kabelac [Tue, 6 Aug 2013 13:22:26 +0000 (15:22 +0200)]
libdm: update DM_ABORT_ON_INTERNAL_ERRORS

Update behavior to disable  aborting when macro is unset
or its set to 0.  In other cases it will abort.
i.e. set to anything....

11 years agothin: use pipe_open instead of popen
Zdenek Kabelac [Tue, 6 Aug 2013 13:21:42 +0000 (15:21 +0200)]
thin: use pipe_open instead of popen

Use new function to directly exec command and read its output.

11 years agoexec: pipe open
Zdenek Kabelac [Tue, 6 Aug 2013 12:27:37 +0000 (14:27 +0200)]
exec: pipe open

Function replaces popen() system and avoids shell execution
and argument parsing (no surprices).

11 years agocleanup: update exec_cmd comment and error
Zdenek Kabelac [Tue, 6 Aug 2013 12:26:00 +0000 (14:26 +0200)]
cleanup: update exec_cmd comment and error

Use log_sys_error for reporting error of system call.
Fix comment for return value.

11 years agoWHATS_NEW: previous commit
Peter Rajnoha [Tue, 6 Aug 2013 12:03:43 +0000 (14:03 +0200)]
WHATS_NEW: previous commit

This page took 0.082229 seconds and 5 git commands to generate.