]> sourceware.org Git - lvm2.git/log
lvm2.git
11 years agopython-lvm: Add addl. PV create arguments
Tony Asleson [Tue, 10 Sep 2013 23:05:28 +0000 (18:05 -0500)]
python-lvm: Add addl. PV create arguments

Added overloaded PV create arguments with defaults for PV
creation.

Addresses bug: https://bugzilla.redhat.com/show_bug.cgi?id=880395

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agolvm2app: Add ability to create PV with args
Tony Asleson [Tue, 10 Sep 2013 23:01:28 +0000 (18:01 -0500)]
lvm2app: Add ability to create PV with args

Add a PV create which takes a paramters object that
has get/set method to configure PV creation.

Current get/set operations include:
- size
- pvmetadatacopies
- pvmetadatasize
- data_alignment
- data_alignment_offset
- zero

Reference: https://bugzilla.redhat.com/show_bug.cgi?id=880395

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agopython-lvm: Test case change for vg.reduce
Tony Asleson [Tue, 10 Sep 2013 22:59:45 +0000 (17:59 -0500)]
python-lvm: Test case change for vg.reduce

Fix reduce as newly changed vg reduce fails when you
try to remove the last pv in the vg.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agometadata.c: Call refactored vgreduce_single
Tony Asleson [Tue, 3 Sep 2013 23:07:43 +0000 (18:07 -0500)]
metadata.c: Call refactored vgreduce_single

Replace the code with the refactored vgreduce_single instead
of calling its own implementation.

Corrects bug: https://bugzilla.redhat.com/show_bug.cgi?id=989174

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agovgreduce: Move _vgreduce_single functionality
Tony Asleson [Tue, 3 Sep 2013 22:31:45 +0000 (17:31 -0500)]
vgreduce: Move _vgreduce_single functionality

Moving the core functionality of vgreduce single into
lib/metadata/vg.c so that the command line and lvm2app library
can call the same core functionality.  New function is
vgreduce_single.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agopython-lvm: Ensure library handle is correct after python gc() call
Tony Asleson [Wed, 31 Jul 2013 20:16:01 +0000 (15:16 -0500)]
python-lvm: Ensure library handle is correct after python gc() call

In a previous commit we added the ability for the library to do garbage
collection, to free all the memory used by the library handle buffer by closing
and re-opening the library handle.  When we introduced this functionality we
also opened up the opportunity that the user of the python bindings to have
an object that references the old library handle.  In this case if the user
tried to use the old object a segmentation fault could occur because the
memory had been previously freed.

This patch tries to mitigate this by storing a copy of the library handle that
was used when the object was created so that it can compare the current in
use pointer with what existed when the object was created.  In the case where
they match the operation is permitted to continue, otherwise an exception is
throw, thus avoiding a segmentation fault.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agopython-lvm: Correct names
Tony Asleson [Wed, 31 Jul 2013 16:56:41 +0000 (12:56 -0400)]
python-lvm: Correct names

The existing names do not follow accepted guidelines.

Signed-off-by: Tony Asleson <tasleson@redhat.com>
11 years agotests: skip raid test on 3.12.0
Zdenek Kabelac [Tue, 19 Nov 2013 10:47:28 +0000 (11:47 +0100)]
tests: skip raid test on 3.12.0

3.12.0 kernel prevents raid test to be usable,
leaving unremovable devices in table.

This needs to be fixed ASAP, meanwhile disable test to make
test machines at least usable.

11 years agotests: on 32bit test with <16T devs
Zdenek Kabelac [Fri, 15 Nov 2013 22:47:14 +0000 (23:47 +0100)]
tests: on 32bit test with <16T devs

Add  'can_use_16T' to detect systems where we could
safely use 16T devices without causing system deadlocks.

16T size leads on those to endless loops in udevd
- it calls blkid which tries cached read from such device
- this ends in endless loop.

Related problems:
https://bugzilla.redhat.com/show_bug.cgi?id=1015028

11 years agoMakefile: fix build in non src dir
Zdenek Kabelac [Fri, 15 Nov 2013 22:44:18 +0000 (23:44 +0100)]
Makefile: fix build in non src dir

Fix 'make install' from builddir != srcdir.

11 years agometadata: Make the fid mda routines a little more resilient.
Petr Rockai [Mon, 18 Nov 2013 17:00:49 +0000 (18:00 +0100)]
metadata: Make the fid mda routines a little more resilient.

11 years agolvmetad: Set up device pointers in synthetic lvmcache_infos.
Petr Rockai [Mon, 18 Nov 2013 16:53:45 +0000 (17:53 +0100)]
lvmetad: Set up device pointers in synthetic lvmcache_infos.

11 years agotest: Force label-based reporting in pv-duplicate.sh.
Petr Rockai [Mon, 18 Nov 2013 16:53:06 +0000 (17:53 +0100)]
test: Force label-based reporting in pv-duplicate.sh.

11 years agoreport: Print UUIDs for missing PVs when possible.
Petr Rockai [Sun, 17 Nov 2013 21:36:13 +0000 (22:36 +0100)]
report: Print UUIDs for missing PVs when possible.

11 years agometadata: Do not throw an error in pv_label for missing PVs.
Petr Rockai [Sun, 17 Nov 2013 21:35:16 +0000 (22:35 +0100)]
metadata: Do not throw an error in pv_label for missing PVs.

11 years agodev-cache.c: Make dev_name a little more robust.
Petr Rockai [Sun, 17 Nov 2013 21:34:56 +0000 (22:34 +0100)]
dev-cache.c: Make dev_name a little more robust.

11 years agoreport: Convert pv_mda_size to a type "label" field.
Petr Rockai [Sun, 17 Nov 2013 20:04:07 +0000 (21:04 +0100)]
report: Convert pv_mda_size to a type "label" field.

11 years agoreporter: Adapt pvseg reporting to label-type fields.
Petr Rockai [Wed, 28 Aug 2013 12:11:59 +0000 (14:11 +0200)]
reporter: Adapt pvseg reporting to label-type fields.

11 years agoreporter: Deal correctly with dummy PVs/labels.
Petr Rockai [Wed, 28 Aug 2013 12:07:26 +0000 (14:07 +0200)]
reporter: Deal correctly with dummy PVs/labels.

11 years agotoollib: Report errors on non-PV arguments to process_each_label.
Petr Rockai [Tue, 20 Aug 2013 23:32:51 +0000 (01:32 +0200)]
toollib: Report errors on non-PV arguments to process_each_label.

11 years agopv_label: NULL result is not always an internal error.
Petr Rockai [Tue, 20 Aug 2013 23:30:38 +0000 (01:30 +0200)]
pv_label: NULL result is not always an internal error.

11 years agoreport: Make PV UUID into a "label" type field.
Petr Rockai [Mon, 29 Jul 2013 17:15:31 +0000 (19:15 +0200)]
report: Make PV UUID into a "label" type field.

11 years agoreport: Iterate over labels instead of PVs for label-only reports.
Petr Rockai [Mon, 29 Jul 2013 17:14:51 +0000 (19:14 +0200)]
report: Iterate over labels instead of PVs for label-only reports.

11 years agoreport: Make PMdaFree into a "label" field.
Petr Rockai [Mon, 29 Jul 2013 17:14:10 +0000 (19:14 +0200)]
report: Make PMdaFree into a "label" field.

11 years agoreport: Adapt _pvfmt_disp to label-based reporting.
Petr Rockai [Mon, 29 Jul 2013 14:00:40 +0000 (16:00 +0200)]
report: Adapt _pvfmt_disp to label-based reporting.

11 years agoreport: Add a proper "label" field type.
Petr Rockai [Mon, 29 Jul 2013 17:07:11 +0000 (19:07 +0200)]
report: Add a proper "label" field type.

11 years agoreport: Make dev_size and dev_name columns' type "label".
Petr Rockai [Mon, 29 Jul 2013 17:05:28 +0000 (19:05 +0200)]
report: Make dev_size and dev_name columns' type "label".

11 years agolabel: Track a device pointer in struct label.
Petr Rockai [Mon, 29 Jul 2013 17:03:20 +0000 (19:03 +0200)]
label: Track a device pointer in struct label.

11 years agometadata: Add a pv_label accessor (go from a PV to its label).
Petr Rockai [Mon, 29 Jul 2013 16:54:59 +0000 (18:54 +0200)]
metadata: Add a pv_label accessor (go from a PV to its label).

11 years agometadata: Add lvmcache_info_mda_free as a companion to pv_mda_free.
Petr Rockai [Mon, 29 Jul 2013 16:52:28 +0000 (18:52 +0200)]
metadata: Add lvmcache_info_mda_free as a companion to pv_mda_free.

11 years agotoollib: Implement process_each_label.
Petr Rockai [Mon, 29 Jul 2013 16:51:27 +0000 (18:51 +0200)]
toollib: Implement process_each_label.

11 years agolabeller: Make the use of "private" as "fmt" explicit.
Petr Rockai [Mon, 29 Jul 2013 13:58:18 +0000 (15:58 +0200)]
labeller: Make the use of "private" as "fmt" explicit.

All labellers always use the "private" (void *) field as the fmt pointer. Making
this fact explicit in the type of the labeller simplifies the label reporting
code which needs to extract the format. Moreover, it removes a number of
error-prone casts from the code.

11 years agometadata: Nuke the exported "pv_read" function.
Petr Rockai [Tue, 19 Feb 2013 09:57:45 +0000 (10:57 +0100)]
metadata: Nuke the exported "pv_read" function.

11 years agometadata: Fix handling of orphan PV linking & re-linking.
Petr Rockai [Tue, 19 Feb 2013 02:13:59 +0000 (03:13 +0100)]
metadata: Fix handling of orphan PV linking & re-linking.

11 years agometadata: Avoid pv_read in find_pv_by_name.
Petr Rockai [Tue, 19 Feb 2013 01:32:25 +0000 (02:32 +0100)]
metadata: Avoid pv_read in find_pv_by_name.

11 years agopvremove: Avoid using pv_read in favour of scanning.
Petr Rockai [Tue, 19 Feb 2013 01:14:51 +0000 (02:14 +0100)]
pvremove: Avoid using pv_read in favour of scanning.

11 years agotest: Fix fallout from pv_read changes.
Petr Rockai [Tue, 19 Feb 2013 00:56:51 +0000 (01:56 +0100)]
test: Fix fallout from pv_read changes.

11 years agopvresize: Do not use pv_read (get the PV from orphan VG).
Petr Rockai [Tue, 19 Feb 2013 00:54:34 +0000 (01:54 +0100)]
pvresize: Do not use pv_read (get the PV from orphan VG).

11 years agotest: Add a test for the failing pv_read optimisation.
Petr Rockai [Tue, 11 Jun 2013 07:13:39 +0000 (09:13 +0200)]
test: Add a test for the failing pv_read optimisation.

11 years agotoollib: Drop the pv_read optimisation.
Petr Rockai [Mon, 18 Feb 2013 23:12:30 +0000 (00:12 +0100)]
toollib: Drop the pv_read optimisation.

Only reading a single PV works correctly only in very limited circumstances.
Moreover, we can't rely on the MDA available on the PV either, since it may be
out of date in some circumstances (until now, we believed that PVs that have an
empty MDA are always orphans, but this is not 100% reliable either).

11 years agometadata: Do not try to check vg_name of a NULL PV.
Petr Rockai [Wed, 20 Mar 2013 13:34:05 +0000 (14:34 +0100)]
metadata: Do not try to check vg_name of a NULL PV.

11 years agotests: used -n for fsck
Zdenek Kabelac [Mon, 11 Nov 2013 16:19:26 +0000 (17:19 +0100)]
tests: used -n for fsck

11 years agotests: indent
Zdenek Kabelac [Mon, 4 Nov 2013 14:06:55 +0000 (15:06 +0100)]
tests: indent

11 years agocleanup: share the nonremoval message
Zdenek Kabelac [Tue, 12 Nov 2013 14:08:35 +0000 (15:08 +0100)]
cleanup: share the  nonremoval message

Use common goto label for not remove log error.

11 years agocleanup: do not pass uninitialized space to selinux.
Zdenek Kabelac [Tue, 24 Sep 2013 12:47:32 +0000 (14:47 +0200)]
cleanup: do not pass uninitialized space to selinux.

Just like with dm_prepare_selinux_context rather initialize to NULL.

11 years agolibdm: catch wrongly reported values
Zdenek Kabelac [Fri, 15 Nov 2013 11:16:50 +0000 (12:16 +0100)]
libdm: catch wrongly reported values

Add internal error warning when string value is used
as sort value for numerical field.

Using log_warn since the function itself does not return error,
so we do not confuse log_error() checker.

11 years agothin: report thin device id
Zdenek Kabelac [Mon, 11 Nov 2013 09:05:45 +0000 (10:05 +0100)]
thin: report thin device id

Support   lvs -o+thin_id  to report thin device id.
This device_id is connection between kernel and lvm2 user space thin
metadata.

11 years agoreport: use _field_set_percent
Zdenek Kabelac [Mon, 23 Sep 2013 09:03:02 +0000 (11:03 +0200)]
report: use _field_set_percent

Use common routine for displaying percentage.

11 years agoreport: fix dereference of string as uint64_t
Zdenek Kabelac [Mon, 23 Sep 2013 08:18:10 +0000 (10:18 +0200)]
report: fix dereference of string as uint64_t

Fix buggy usage of "" (empty string) as a numerical string
value used for sorting.

On intel 64b platform this was typically resolve
as 0xffffff0000000000 - which is already 'close' to
UINT64_MAX which is used for _minusone64.

On other platforms it might have been giving
different numbers depends on aligment of strings.

Use proper &_minusone64 for sorting value when the reported
value is NUM.

Note: each numerical value needs to be thought about if it needs
default value &_zero64 or &_minusone64 since for cases, were
value of zero is valid, sorting should not be mixing entries
together.

11 years agoreport: using _field_set_value
Zdenek Kabelac [Mon, 23 Sep 2013 08:17:50 +0000 (10:17 +0200)]
report: using _field_set_value

Simple conversion to use _field_set_value() and shorteing
the code.

11 years agoreport: add wrappers to set values and percents
Zdenek Kabelac [Mon, 23 Sep 2013 08:02:01 +0000 (10:02 +0200)]
report: add wrappers to set values and percents

Add wrapper function for dm_report_field_set_value() which returns void
and return 1, so the code could be shorter.

Add wrapper function for percent display _field_set_percent().

11 years agopost-release
Alasdair G Kergon [Wed, 13 Nov 2013 14:11:11 +0000 (14:11 +0000)]
post-release

11 years agorelease 2.02.104 v2_02_104
Alasdair G Kergon [Wed, 13 Nov 2013 14:02:34 +0000 (14:02 +0000)]
release 2.02.104

87 files changed, 1207 insertions(+), 294 deletions(-)

11 years agogcc: replace #ifdef linux with __linux__
Alasdair G Kergon [Wed, 13 Nov 2013 13:56:29 +0000 (13:56 +0000)]
gcc: replace #ifdef linux with __linux__

11 years agopvscan: retry VG refresh before autoactivation if it fails
Peter Rajnoha [Tue, 12 Nov 2013 09:55:34 +0000 (10:55 +0100)]
pvscan: retry VG refresh before autoactivation if it fails

There's a tiny race when suspending the device which is part
of the refresh because when suspend ioctl is performed, the
dm kernel driver executes (do_suspend and dm_suspend kernel fn):

  step 1: a check whether the dev is already suspended and
          if yes it returns success immediately as there's
          nothing to do
  step 2: it grabs the suspend lock
  step 3: another check whether the dev is already suspended
          and if found suspended, it exits with -EINVAL now

The race can occur in between step 1 and step 2. To prevent
premature autoactivation failure, we're using a simple retry
logic here before we fail completely. For a complete solution,
we need to fix the locking so there's no possibility for suspend
calls to interleave each other to cause this kind of race.

This is just a workaround. Remove it and replace it with proper
locking once we have that in!

11 years agomirror: Handle failures in tmp mirror used when up-converting.
Jonathan Brassow [Fri, 8 Nov 2013 15:52:00 +0000 (09:52 -0600)]
mirror: Handle failures in tmp mirror used when up-converting.

Failures in the temporary mirror used when up-converting cause dmeventd
to issue 'lvconvert --repair' on the sub-LV, <lv_name>_mimagetmp_?.  The
'lvconvert' command refuses to deal with this sub-LV outright - it
expects to be given the name of the top-level LV.  So, just like we do
with mirrored logs, we strip-off the portion of the name that is not
the top-level LV and issue the command on the top-level LV instead.

11 years agocorosync: fix some gcc warnings
Peter Rajnoha [Wed, 6 Nov 2013 13:55:18 +0000 (14:55 +0100)]
corosync: fix some gcc warnings

warning: function declaration isn't a prototype [-Wstrict-prototypes]
warning: old-style function definition [-Wold-style-definition]

11 years agoprofile: add thin_pool_chunk_size_policy to default.profile
Peter Rajnoha [Wed, 6 Nov 2013 12:29:25 +0000 (13:29 +0100)]
profile: add thin_pool_chunk_size_policy to default.profile

By default, thin_pool_chunk_size_policy is set to "generic".

11 years agotests: testing thin lvchange
Zdenek Kabelac [Fri, 1 Nov 2013 11:55:41 +0000 (12:55 +0100)]
tests: testing thin lvchange

Test various thin change operation,
including activation logic - which is somewhat
limited with singlenode emulation.

More tests needs to be added.

11 years agodmsetup: report error on stderr
Zdenek Kabelac [Fri, 1 Nov 2013 11:40:27 +0000 (12:40 +0100)]
dmsetup: report error on stderr

Send error message on stdout, since after _display_info_long()
command return errors.

Patch makes consistent behavior for command:

dmsetup info -c non-existing-dev
&
dmsetup info non-existing-dev

Now both commands report error on stderr when they return error status
for non-existing device.

11 years agoactivation: improve activation
Zdenek Kabelac [Fri, 1 Nov 2013 09:31:31 +0000 (10:31 +0100)]
activation: improve activation

This patch fixes mostly cluster behavior but also updates
non-cluster reaction where calls like   'lvchange -aln'
lead to incorrect errors for some segment types.

Fix the implicit activation rules where some segment types could
be activated only in exclusive mode in cluster.
lvm2 command was not preserver 'local' property and incorrectly
converted local activations in to plain exclusive, so the local
activation could have activate volumes exclusively, but remotely.

11 years agoactivation: _lv_activate is ok when filtered.
Zdenek Kabelac [Fri, 1 Nov 2013 09:28:42 +0000 (10:28 +0100)]
activation: _lv_activate is ok when filtered.

If the volume_list filters out volume from activation,
it is still success result for this function.
Change the error message back to verbose level.

Detect if the volume is active localy before zeroing,
so we report error a bit later for cases, where volume
could not be activated because it doesn't pass through volume
list  (but user still could create volume when he disables
zeroing)

11 years agolocking: activate_lv_excl return correct error code
Zdenek Kabelac [Fri, 1 Nov 2013 09:26:43 +0000 (10:26 +0100)]
locking: activate_lv_excl return correct error code

Correct return code of activate_lv_excl().

Function is not supposed to return activation state of
activated volume, but return code of the operation.
Since i.e. when activation filter is allowing to activate
volume on current system, it is still success even though
no volume is activated.

11 years agoudev: wrong line in previous commit
Peter Rajnoha [Wed, 30 Oct 2013 13:28:43 +0000 (14:28 +0100)]
udev: wrong line in previous commit

11 years agoudev: properly trigger LVM scan for MD partitions
Peter Rajnoha [Wed, 30 Oct 2013 13:02:38 +0000 (14:02 +0100)]
udev: properly trigger LVM scan for MD partitions

MD can directly create partition devices without a need to run
an extra kpartx or partprobe call. We need to react to this event in
a different way as for bare MD devices - we need to handle the ADD event
for KERNEL=="md[0-9]*p[0-9]*" kernel name and trigger the LVM scanning
to update lvmetad to trigger autoactivation and so on...

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1023250

11 years agoudev: no need to check DM_NOSCAN in lvmetad rules
Peter Rajnoha [Tue, 29 Oct 2013 12:54:14 +0000 (13:54 +0100)]
udev: no need to check DM_NOSCAN in lvmetad rules

It's covered by general DM_UDEV_DISABLE_OTHER_RULES_FLAG.

11 years agoWHATS_NEW: commit 9d06212
Peter Rajnoha [Tue, 29 Oct 2013 12:49:55 +0000 (13:49 +0100)]
WHATS_NEW: commit 9d06212

Other changes in previous commits 9d06212 and f1a42aa are changes
in the code that was not yet released as part of upcoming v104.

11 years agolvconvert: use LV_TEMPORARY when necessary during lvconvert to thin pool
Peter Rajnoha [Tue, 29 Oct 2013 12:18:14 +0000 (13:18 +0100)]
lvconvert: use LV_TEMPORARY when necessary during lvconvert to thin pool

This is an addition to original patch for lvcreate - commit 039bdad.
The same principle applies to lvconvert where there are several steps
during which we need to wipe the existing LV that's being converted
to thin pool, making sure there's no other interference from outside (udev).

11 years agoudev: proper reset of DM_UDEV_DISABLE_OTHER_RULES_FLAG and honour this flag in lvmeta...
Peter Rajnoha [Tue, 29 Oct 2013 12:15:45 +0000 (13:15 +0100)]
udev: proper reset of DM_UDEV_DISABLE_OTHER_RULES_FLAG and honour this flag in lvmetad rules

Reset the DM_UDEV_OTHER_RULES_FLAG to original value right at the
time of dropping the DM_NOSCAN flag.

When DM_NOSCAN is set, the DM_UDEV_DISABLE_OTHER_RULES_FLAG is also set
to avoid udev processing in "other/foreign" rules. If the noscan flag
is dropped, the DM_UDEV_DISABLE_OTHER_RULES_FLAG should be reset to
its original value.

Also, lvmetad should respect the DM_UDEV_DISABLE_OTHER_RULES_FLAG
because if the volume is set with this flag it:
  - definitely is not a top-level device (so makes no sense for lvmetad scanning)
  - is not supposed to be scanned further (for any stacking on top of
    it, including LVM stacking itself and any autoactivation of stacked LVs)

11 years agoWHATS_NEW: commit 4c0db84
Peter Rajnoha [Tue, 29 Oct 2013 10:04:32 +0000 (11:04 +0100)]
WHATS_NEW: commit 4c0db84

11 years agogcc: fix comparing floating point warning
Zdenek Kabelac [Fri, 25 Oct 2013 08:38:09 +0000 (10:38 +0200)]
gcc: fix comparing floating point warning

Since we enabled some more gcc warnings - let's adapt for
it and check for double equals with DBL_EPSILON.

Current close_enough() is far from perfect
for more details see i.e. here:
http://randomascii.wordpress.com/2012/01/11/tricks-with-the-floating-point-format/
but fairly enough for lvm2 use-case.

11 years agotests: fix old-style gcc warning
Zdenek Kabelac [Fri, 25 Oct 2013 08:37:30 +0000 (10:37 +0200)]
tests: fix old-style gcc warning

11 years agoconfigure: check more compile flags
Zdenek Kabelac [Thu, 24 Oct 2013 23:00:10 +0000 (01:00 +0200)]
configure: check more compile flags

Check for clobbered (and put few others into same league)

11 years agoconfigure: detect compiler flag
Zdenek Kabelac [Thu, 24 Oct 2013 19:40:25 +0000 (21:40 +0200)]
configure: detect compiler flag

Use m4 macro AC_TRY_CCFLAG to detect presence of some compiler
option.
Use it to detect -Wjump-misses-init.

11 years agoclean-up: Remove redundant faulty logic
Jonathan Brassow [Thu, 24 Oct 2013 03:44:04 +0000 (22:44 -0500)]
clean-up: Remove redundant faulty logic

Remove conditional that boils down to "if yes or no, then do".  The
previous condition in the statement is sufficient and the extra
(always true) condition is unnecessary.

11 years agoclvmd: fix verify message rejection of REMOTE flag
David Teigland [Thu, 24 Oct 2013 16:10:09 +0000 (11:10 -0500)]
clvmd: fix verify message rejection of REMOTE flag

This fixes a bug in commit 19baf842 where verify_message
was rejecting the CLVMD_FLAG_REMOTE flag.  It was missed
since the patch was ported from an lvm version where that
flag does not exist.

11 years agobuild: Use additional gcc warning flags.
Alasdair G Kergon [Thu, 24 Oct 2013 16:10:24 +0000 (17:10 +0100)]
build: Use additional gcc warning flags.

11 years agoMirror: Fix hangs and lock-ups caused by attempting label reads of mirrors
Jonathan Brassow [Wed, 23 Oct 2013 00:14:33 +0000 (19:14 -0500)]
Mirror: Fix hangs and lock-ups caused by attempting label reads of mirrors

There is a problem with the way mirrors have been designed to handle
failures that is resulting in stuck LVM processes and hung I/O.  When
mirrors encounter a write failure, they block I/O and notify userspace
to reconfigure the mirror to remove failed devices.  This process is
open to a couple races:
1) Any LVM process other than the one that is meant to deal with the
mirror failure can attempt to read the mirror, fail, and block other
LVM commands (including the repair command) from proceeding due to
holding a lock on the volume group.
2) If there are multiple mirrors that suffer a failure in the same
volume group, a repair can block while attempting to read the LVM
label from one mirror while trying to repair the other.

Mitigation of these races has been attempted by disallowing label reading
of mirrors that are either suspended or are indicated as blocking by
the kernel.  While this has closed the window of opportunity for hitting
the above problems considerably, it hasn't closed it completely.  This is
because it is still possible to start an LVM command, read the status of
the mirror as healthy, and then perform the read for the label at the
moment after a the failure is discovered by the kernel.

I can see two solutions to this problem:
1) Allow users to configure whether mirrors can be candidates for LVM
labels (i.e. whether PVs can be created on mirror LVs).  If the user
chooses to allow label scanning of mirror LVs, it will be at the expense
of a possible hang in I/O or LVM processes.
2) Instrument a way to allow asynchronous label reading - allowing
blocked label reads to be ignored while continuing to process the LVM
command.  This would action would allow LVM commands to continue even
though they would have otherwise blocked trying to read a mirror.  They
can then release their lock and allow a repair command to commence.  In
the event of #2 above, the repair command already in progress can continue
and repair the failed mirror.

This patch brings solution #1.  If solution #2 is developed later on, the
configuration option created in #1 can be negated - allowing mirrors to
be scanned for labels by default once again.

11 years agoactivation: flag temporary LVs internally
Peter Rajnoha [Wed, 23 Oct 2013 12:06:39 +0000 (14:06 +0200)]
activation: flag temporary LVs internally

Add LV_TEMPORARY flag for LVs with limited existence during command
execution. Such LVs are temporary in way that they need to be activated,
some action done and then removed immediately. Such LVs are just like
any normal LV - the only difference is that they are removed during
LVM command execution. This is also the case for LVs representing
future pool metadata spare LVs which we need to initialize by using
the usual LV before they are declared as pool metadata spare.

We can optimize some other parts like udev to do a better job if
it knows that the LV is temporary and any processing on it is just
useless.

This flag is orthogonal to LV_NOSCAN flag introduced recently
as LV_NOSCAN flag is primarily used to mark an LV for the scanning
to be avoided before the zeroing of the device happens. The LV_TEMPORARY
flag makes a difference between a full-fledged LV visible in the system
and the LV just used as a temporary overlay for some action that needs to
be done on underlying PVs.

For example: lvcreate --thinpool POOL --zero n -L 1G vg

- first, the usual LV is created to do a clean up for pool metadata
  spare. The LV is activated, zeroed, deactivated.

- between "activated" and "zeroed" stage, the LV_NOSCAN flag is used
  to avoid any scanning in udev

- betwen "zeroed" and "deactivated" stage, we need to avoid the WATCH
  udev rule, but since the LV is just a usual LV, we can't make a
  difference. The LV_TEMPORARY internal LV flag helps here. If we
  create the LV with this flag, the DM_UDEV_DISABLE_DISK_RULES
  and DM_UDEV_DISABLE_OTHER_RULES flag are set (just like as it is
  with "invisible" and non-top-level LVs) - udev is directed to
  skip WATCH rule use.

- if the LV_TEMPORARY flag was not used, there would normally be
  a WATCH event generated once the LV is closed after "zeroed"
  stage. This will make problems with immediated deactivation that
  follows.

11 years agocleanup: for commit 546db1c
Peter Rajnoha [Wed, 23 Oct 2013 07:48:33 +0000 (09:48 +0200)]
cleanup: for commit 546db1c

 - properly clean lvm2-pvscan@.service on distclean
 - use @sbindir@ for sbin path in ExecStop

11 years agoWHATS_NEW: typo
Peter Rajnoha [Tue, 22 Oct 2013 14:37:02 +0000 (16:37 +0200)]
WHATS_NEW: typo

11 years agoblkdeactivate: fix endless loop if device(s) given and unable to umount/deactivate
Peter Rajnoha [Tue, 22 Oct 2013 14:10:20 +0000 (16:10 +0200)]
blkdeactivate: fix endless loop if device(s) given and unable to umount/deactivate

The blkdeactivate script iterates over the list of devices if they're
given as an argument and it tries to umount/deactivate them one by one.

This iteration failed to proceed if any of the umount/deactivation
was unsuccessful - there was a missing "shift" call to move to the
next argument (device) for processing. As a result of this, the same
device was tried again and again, causing an endless loop, never
proceeding to the next device given.

11 years agomake: correct sed line in udev's Makefile
Peter Rajnoha [Tue, 22 Oct 2013 13:13:58 +0000 (15:13 +0200)]
make: correct sed line in udev's Makefile

11 years agoudev+systemd: refine lvm2-pvscan@.service to better track device existence
Peter Rajnoha [Tue, 22 Oct 2013 12:03:53 +0000 (14:03 +0200)]
udev+systemd: refine lvm2-pvscan@.service to better track device existence

When using ENV{SYSTEMD_WANTS}=lvm2-pvscan@... to instantiate a service
for lvmetad scan when the new PV appears in the system, the service
is started and executed. However, to track device removal, we need
to bind it (the "BindsTo" systemd directive) to a certain .device
systemd unit.

In default systemd setup, the device is tracked by it's name and
sysfs path (there's normally a sysfs path .device systemd unit for
a device and then the device name .device unit as an alias for it).
Neither of these two is useful for lvmetad update as we need to bind
it to device's <major>:<minor> pair.

The /dev/block/<major>:<minor> is the essential symlink under /dev
that exists for each block device (created by default udev rules
provided by udev directly). So let's use this as an alias for
the device's .device unit as well by means of "ENV{SYSTEMD_ALIAS}"
declaration within udev rules which systemd understands (this will
create a new alias "dev-block-<major>:<minor>.device".

Then we can easily bind the "dev-block-<major>:<minor>" device
systemd unit with instantiated lvm2-pvscan@<major>:<minor>.service.
So once the device is removed from the systemd, the
lvm-pvscan@<major>:<minor>.service executes it's ExecStop action
(which in turn notifies lvmetad about the device being gone).

This completes the udev-systemd-lvmetad interaction then.

11 years agopvscan: use major:minor as short form of --major and --minor arg for pvscan --cache
Peter Rajnoha [Tue, 22 Oct 2013 11:52:18 +0000 (13:52 +0200)]
pvscan: use major:minor as short form of --major and --minor arg for pvscan --cache

Before, pvscan recognized either:
  pvscan --cache --major <major> --minor <minor>
or
  pvscan --cache <DevicePath>

When the device is gone and we need to notify lvmetad about device
removal, only --major/--minor works as we can't translate DevicePath
into major/minor pair anymore. The device does not exist in the system
and we don't keep DevicePath index in lvmetad cache to make the
translation internally into original major/minor pair. It would be
useless to keep this index just for this one exact case.

There's nothing bad about using "--major <major> --minor <minor>",
but it makes our life a bit harder when trying to make an
interconnection with systemd units, mainly with instantiated services
where only one and only one arg can be passed (which is encoded in the
service name).

This patch tries to make this easier by adding support for recognizing
the "<major>:<minor>" as a shortcut for the longer form
"--major <major> --minor <minor>". The rule here is simple: if the argument
starts with "/", it's a DevicePath, otherwise it's a <major>:<minor> pair.

11 years agovgimportclone: remove 2>/dev/null from three lvm commands
Mike Snitzer [Mon, 21 Oct 2013 22:04:14 +0000 (18:04 -0400)]
vgimportclone: remove 2>/dev/null from three lvm commands

There is no point eating stderr for these commands.  In fact the
redirect causes confusion and hurts dubugging.

Also reword an error message if the pvs command fails so as not be
certain that a device is not a PV.  Coupled with removing the stderr
redirect this will improve the user experience in the face of errors.

11 years agoTEST: Test was trying to kill 2 devices in RAID5 instead of RAID6
Jonathan Brassow [Fri, 18 Oct 2013 14:33:37 +0000 (09:33 -0500)]
TEST: Test was trying to kill 2 devices in RAID5 instead of RAID6

Segment type being used for test should have been 'raid6'.

11 years agoudev+systemd: make pvscan --cache -aay run as systemd background job from udev
Peter Rajnoha [Fri, 18 Oct 2013 09:07:21 +0000 (11:07 +0200)]
udev+systemd: make pvscan --cache -aay run as systemd background job from udev

The new lvm2-pvscan@.service is responsible for on-demand execution
of "pvscan --cache --activate ay" which causes lvmetad to be
updated and LVM activation done if the VG is complete.

Also, use udev-systemd mechanism to instantiate the job as the
lvm2-pvscan@$devnode.service on each newly appeared PV in the system.
This prevents the background job to be killed (that would happen
if it was directly forked from udev rule - this behaviour is seen
in recent versions of udev with the help of systemd that can track
detached processes - the detached process would still be in the same
cgroup).

To enable this official udev-systemd protocol for instantiating
background jobs, use new --enable-udev-systemd-background-jobs
configure switch (it's disabled by default). This option is highly
recommended wherever systemd is used!

11 years agotests: drop settle for old systems
Zdenek Kabelac [Thu, 17 Oct 2013 20:54:12 +0000 (22:54 +0200)]
tests: drop settle for old systems

Reverts previously added udevsettle call.

Seems to be unrelated, while udev on old system may take over 10
minutes, to finish it's very slow and CPU intensive work, it doesn't
interact directly with created device, only access /dev/mapper/control
node via dmsetup, so the device is ocasionaly blocked by something else.

11 years agotests: older losetup allows only single device name
Zdenek Kabelac [Thu, 17 Oct 2013 15:52:42 +0000 (17:52 +0200)]
tests: older losetup allows only single device name

Stay compatible with only 1 arg for losetup -d

11 years agotests: fix last commit
Zdenek Kabelac [Thu, 17 Oct 2013 14:59:30 +0000 (16:59 +0200)]
tests: fix last commit

It must not fail here during execution, so always check in a way
that '||' is used for call of settle.

11 years agotests: workaround udevd compromising tests
Zdenek Kabelac [Thu, 17 Oct 2013 14:19:06 +0000 (16:19 +0200)]
tests: workaround udevd compromising tests

Patch helps a bit when lvm2 is build with disabled udev_sync support,
but udevd runs in the system - so it randomly influences unrelated tests
even - so before every test wait at least till udevd is settled.

11 years agotests: fix exporting content of make vars
Zdenek Kabelac [Thu, 17 Oct 2013 08:41:08 +0000 (10:41 +0200)]
tests: fix exporting content of make vars

Further tune script, so it works correctly with
usable and unusable thin tools.

11 years agotests: use bash for bash script
Zdenek Kabelac [Thu, 17 Oct 2013 09:11:24 +0000 (11:11 +0200)]
tests: use bash for bash script

This script needs bash

11 years agolibdm: fix races with udev
Mikulas Patocka [Mon, 16 Sep 2013 19:23:54 +0000 (15:23 -0400)]
libdm: fix races with udev

On modern systems udev manages nodes in /dev/mapper directory.
It creates, deletes and renames the nodes according to the
state of the kernel driver.

When the dmsetup is compiled without udev support (--enable-udev_sync)
and runs on the system with running udevd it tries to manage nodes in
/dev/mapper too, so it can race with udev.
dmsetup checks if the node was created/deleted/renamed with the stat
syscall, and skips the operation if it was. However, if udev
creates/deletes/renames the node after the stat syscall and before the
mknod/unlink/rename syscall, dmsetup reports an error.

Since in the system everything happened as expected, skip reporting
error for such case.

These races can be easily provoked by inserting sleep at appropriate
places.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
11 years agolibdm: do not show holders missing error
Zdenek Kabelac [Thu, 17 Oct 2013 09:12:02 +0000 (11:12 +0200)]
libdm: do not show holders missing error

On older system this may not be present, so skip this error message.

11 years agoheaders: use __linux__ instead of linux
mpatocka@redhat.com [Thu, 17 Oct 2013 09:14:07 +0000 (11:14 +0200)]
headers: use __linux__ instead of linux

This file may be included by other programs, so it should be compliant
with the C standard.

* use __linux__ instead of linux - __linux__ is always defined, linux is
  not defined when gcc runs in standard-compliant mode (with -std=c89 or
  -std=c99) because the C standard doesn't allow polluting namespace
  with arbitrary defines.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
11 years agocoverity: sscanf should use "%u" instead of "%i"
Peter Rajnoha [Thu, 17 Oct 2013 08:11:53 +0000 (10:11 +0200)]
coverity: sscanf should use "%u" instead of "%i"

The "age" variable is unsigned:

  unsigned age = 0;
  ...
  if (argc == 2 && (sscanf(argv[1], "%i", &age) != 1))

11 years agotests: correct LVM_TEST_THIN_CHECK_CMD
Zdenek Kabelac [Wed, 16 Oct 2013 13:05:12 +0000 (15:05 +0200)]
tests: correct LVM_TEST_THIN_CHECK_CMD

missed to use proper shell variable

11 years agocoverity: assigned variable not used and reassigned later
Peter Rajnoha [Wed, 16 Oct 2013 13:06:43 +0000 (15:06 +0200)]
coverity: assigned variable not used and reassigned later

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