]> sourceware.org Git - lvm2.git/log
lvm2.git
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

11 years agothin: missed check for thin_pool in last update
Zdenek Kabelac [Wed, 16 Oct 2013 10:47:30 +0000 (12:47 +0200)]
thin: missed check for thin_pool in last update

11 years agotests: test repairability of thin pool
Zdenek Kabelac [Wed, 16 Oct 2013 08:17:17 +0000 (10:17 +0200)]
tests: test repairability of thin pool

Initial testing of thin pool's metadata with thin repairing tools.
Try to use tools from configuration settings, but allow them
to be overriden by settings of these variables:
LVM_TEST_THIN_CHECK_CMD,
LVM_TEST_THIN_DUMP_CMD,
LVM_TEST_THIN_REPAIR_CMD

FIXME: test reveals some more important bugs:
  pvremove -ff also needs --yes
  vgremove -ff doesn not remove metadata when there are no real LVs.
  vgreduce is not able to reduce VG with pool without pool's PVs

11 years agotests: add wait
Zdenek Kabelac [Mon, 14 Oct 2013 18:23:23 +0000 (20:23 +0200)]
tests: add wait

We need to wait till kill really kills sleep

11 years agothin: fix lvconvert for active pool.
Zdenek Kabelac [Wed, 16 Oct 2013 08:11:37 +0000 (10:11 +0200)]
thin: fix lvconvert for active pool.

Prohibit conversion of pool device with active thin volumes.
Properly restore active states only for active thin pool volume.
Use new LV_NOSCAN when converting volume into thin pool's metadata.

11 years agoactivation: check for open count with a timeout before removal/deactivation of an LV
Peter Rajnoha [Tue, 15 Oct 2013 10:44:42 +0000 (12:44 +0200)]
activation: check for open count with a timeout before removal/deactivation of an LV

This patch reinstates the lv_info call to check for open count of
the LV we're removing/deactivating - this was changed with commit 125712b
some time ago and we relied on the ioctl retry logic deeper in the libdm
while calling the exact 'remove' ioctl.

However, there are still some situations in which it's still required to
check for open count before we do any 'remove' actions - this mainly
applies to LVs which consist of several sub LVs, like it is for
virtual snapshot devices.

The commit 1146691 fixed the issue with ordering of actions during
virtual snapshot removal while the snapshot is still open. But
the check for the open status of the snapshot is still prone to
marking the snapshot as in use with an immediate exit even though
this could be a temporary asynchronous open only, most notably
because of udev and its WATCH udev rule with accompanying scans
for the event which is asynchronous. The situation where this crops
up most often is when we're closing the LV that was open for read-write
and then calling lvremove immediately.

This patch reinstates the original lv_info call for the open status
of the LV in the lv_check_not_in_use fn that gets called before
we do any LV removal/deactivation. In addition to original logic,
this patch adds its own retry loop with a delay (25x0.2 seconds)
besides the existing ioctl retry loop.

11 years agoRAID: Better error message when attempting scrubbing op on thinpool LV
Jonathan Brassow [Mon, 14 Oct 2013 20:14:16 +0000 (15:14 -0500)]
RAID: Better error message when attempting scrubbing op on thinpool LV

Component LVs of a thinpool can be RAID LVs.  Users who attempt a
scrubbing operation directly on a thinpool will be prompted to
specify the sub-LV they wish the operation to be performed on.  If
neither of the sub-LVs are RAID, then a message telling them that
the operation can only be performed on a RAID LV will be given.

11 years agoRAID: Report RAID images split with tracking as out-of-sync ("I").
Jonathan Brassow [Mon, 14 Oct 2013 15:48:44 +0000 (10:48 -0500)]
RAID: Report RAID images split with tracking as out-of-sync ("I").

Split image should have an out-of-sync attr ('I') - always.  Even if
the RAID LV has not been written to since the LV was split off, it is
still not part of the group that makes up the RAID and is therefore
"out-of-sync".

11 years agotests: lvcreate and snapshot update
Zdenek Kabelac [Fri, 11 Oct 2013 21:59:14 +0000 (23:59 +0200)]
tests: lvcreate and snapshot update

Test creation really in cluster.
Update test to check removal when snapshot device is being held open.

11 years agotests: harness updates
Zdenek Kabelac [Fri, 11 Oct 2013 20:31:57 +0000 (22:31 +0200)]
tests: harness updates

Reshape code a bit to make sockepair 'swappable' with plain old pipe
call.

Display status for FAILED error.

Increase buffer to hold always at least 1 page size.

Print error results with capitals.

11 years agosnapshot: rework parsing of snapshot metadata
Zdenek Kabelac [Wed, 9 Oct 2013 12:50:51 +0000 (14:50 +0200)]
snapshot: rework parsing of snapshot metadata

Add better parsing code for snapshot metadata, which describe
properly errors found for snapshot segment.

11 years agosnapshot: deactivate virtual snapshot first
Zdenek Kabelac [Fri, 11 Oct 2013 21:53:28 +0000 (23:53 +0200)]
snapshot: deactivate virtual snapshot first

Since the virtual snapshot has no reason to stay alive once we
detach related snapshot - deactivate whole thing in front of
snapshot removal - otherwice the code would get tricky for
support in cluster.

The correct full solution would require to have transactions
for libdm operations.

Also enable to the check for snapshot being opened prior
the origin deactivation, otherwise we could easily end
with the origin being deactivate, but snapshot still kept
active, desynchronizing locking state in cluster.

11 years agosnapshot: disable merging for virtual snaps
Zdenek Kabelac [Fri, 11 Oct 2013 20:47:45 +0000 (22:47 +0200)]
snapshot: disable merging for virtual snaps

Merging into virtual origin is not supposed to work.

11 years agosnapshot: move virtsnap code from tool to lib
Zdenek Kabelac [Fri, 11 Oct 2013 20:42:34 +0000 (22:42 +0200)]
snapshot: move virtsnap code from tool to lib

Move code for removal dependency from tool's remove.c
into lib's manipulation code.

Same code then works with lvm2app.

11 years agometadata: add INTERNAL_ERROR to "Metadata inconsistency" msg
Peter Rajnoha [Thu, 10 Oct 2013 11:34:43 +0000 (13:34 +0200)]
metadata: add INTERNAL_ERROR to "Metadata inconsistency" msg

So we can spot it better if it occurs.

11 years agometadata: properly register LV_NOSCAN flag
Peter Rajnoha [Thu, 10 Oct 2013 11:24:32 +0000 (13:24 +0200)]
metadata: properly register LV_NOSCAN flag

Addendum to commit ce7489e which introduced a new *internal* LV_NOSCAN
flag and so it needs to be marked that way properly otherwise it
ends up unrecognized and improperly handled during metadata export.

11 years agocleanup: WHATS_NEW + compiler warning about discarding const
Peter Rajnoha [Thu, 10 Oct 2013 07:07:42 +0000 (09:07 +0200)]
cleanup: WHATS_NEW + compiler warning about discarding const

11 years agolibdaemon: Fix a subtle race in worker thread creation.
Petr Rockai [Wed, 9 Oct 2013 20:20:36 +0000 (22:20 +0200)]
libdaemon: Fix a subtle race in worker thread creation.

11 years agolvmetad: Fix a possible deadlock in pv_clear_all.
Petr Rockai [Wed, 9 Oct 2013 20:19:51 +0000 (22:19 +0200)]
lvmetad: Fix a possible deadlock in pv_clear_all.

11 years agolibdm: Fix a data race in dm_pool_{create,destroy}.
Petr Rockai [Wed, 9 Oct 2013 20:19:06 +0000 (22:19 +0200)]
libdm: Fix a data race in dm_pool_{create,destroy}.

11 years agolibdm: Link to libpthread unconditionally.
Petr Rockai [Wed, 9 Oct 2013 22:27:53 +0000 (00:27 +0200)]
libdm: Link to libpthread unconditionally.

11 years agofilters: Add NVM Express (nvme).
Alasdair G Kergon [Wed, 9 Oct 2013 19:08:07 +0000 (20:08 +0100)]
filters: Add NVM Express (nvme).

11 years agoWHATS_NEW: commit 0decd75
Peter Rajnoha [Wed, 9 Oct 2013 13:59:19 +0000 (15:59 +0200)]
WHATS_NEW: commit 0decd75

11 years agolvmetad: Do not try to lock a NULL vgid.
Petr Rockai [Wed, 9 Oct 2013 12:53:58 +0000 (14:53 +0200)]
lvmetad: Do not try to lock a NULL vgid.

11 years agotest: Correctly trigger inconsistent metadata repair in lvmcache-exercise.
Petr Rockai [Wed, 9 Oct 2013 12:44:15 +0000 (14:44 +0200)]
test: Correctly trigger inconsistent metadata repair in lvmcache-exercise.

Since lvconvert --repair sets handles_missing_pvs, it will not repair
inconsistent metadata automatically. Calling lvs instead should do the trick.

11 years agometadata: Fix metadata repair paths when lvmetad is used.
Petr Rockai [Wed, 9 Oct 2013 12:04:47 +0000 (14:04 +0200)]
metadata: Fix metadata repair paths when lvmetad is used.

11 years agotest: Make comma a separator as in make check T=lvconvert,lvcreate
Petr Rockai [Wed, 9 Oct 2013 12:02:34 +0000 (14:02 +0200)]
test: Make comma a separator as in make check T=lvconvert,lvcreate

11 years agoWHATS_NEW: commit d888a05 and 808a5d9
Peter Rajnoha [Wed, 9 Oct 2013 10:11:12 +0000 (12:11 +0200)]
WHATS_NEW: commit d888a05 and 808a5d9

11 years agocleanup: remove 'discards 'const' qualifier' compilation warning
Peter Rajnoha [Wed, 9 Oct 2013 08:05:02 +0000 (10:05 +0200)]
cleanup: remove 'discards 'const' qualifier' compilation warning

11 years agolibdaemon: Fix an invalid memory read.
Petr Rockai [Tue, 8 Oct 2013 21:19:11 +0000 (23:19 +0200)]
libdaemon: Fix an invalid memory read.

11 years agolvmetad: Properly grab locks in pv_gone.
Petr Rockai [Tue, 8 Oct 2013 21:16:41 +0000 (23:16 +0200)]
lvmetad: Properly grab locks in pv_gone.

11 years agolvmetad: Clean up pvid->vgid map when last PV in a VG disappears.
Petr Rockai [Tue, 8 Oct 2013 21:14:55 +0000 (23:14 +0200)]
lvmetad: Clean up pvid->vgid map when last PV in a VG disappears.

11 years agotests: needed --type mirror
Zdenek Kabelac [Tue, 8 Oct 2013 14:56:09 +0000 (16:56 +0200)]
tests: needed --type mirror

Avoid testing raids here (would need kernel module)

11 years agotests: reappering device
Zdenek Kabelac [Tue, 8 Oct 2013 14:19:14 +0000 (16:19 +0200)]
tests: reappering device

Simulation of problem for:
https://bugzilla.redhat.com/show_bug.cgi?id=995440

11 years agoudev: add support for "NOSCAN" flag
Peter Rajnoha [Tue, 8 Oct 2013 11:33:28 +0000 (13:33 +0200)]
udev: add support for "NOSCAN" flag

Recognize DM_SUBSYSTEM_UDEV_FLAG0 which for LVM is the "LVM_NOSCAN"
flag that causes the scanning to be skipped (mainly blkid) and
also directs all the foreign rules to be skipped as well.

Important thing here is that the "watch" udev rules is still set
as well as the /dev/disk/by-id content created (which does not
require any scanning to be done). Also, the flag is dropped on
any subsequent event and scanning done...

11 years agoactivation: add support for flagging an LV to skip udev scanning during activation
Peter Rajnoha [Tue, 8 Oct 2013 11:27:21 +0000 (13:27 +0200)]
activation: add support for flagging an LV to skip udev scanning during activation

A common scenario is during new LV creation when we need to wipe the
newly created LV and avoid any udev scanning before this stage otherwise
it could cause the device (the LV) to be claimed by some other subsystem
for which there were stale metadata within LV data.

This patch adds possibility to mark the LV we're just about to wipe with
a flag that gets passed to udev via DM_COOKIE as a subsystem specific
flag - DM_SUBSYSTEM_UDEV_FLAG0 (in this case the subsystem is "LVM")
so LVM udev rules will take care of handling that.

11 years agotests: lvconvert more thin extorg conversions
Zdenek Kabelac [Tue, 8 Oct 2013 11:30:21 +0000 (13:30 +0200)]
tests: lvconvert more thin extorg conversions

Add test for conversion of pool and thin lv at the same time.

11 years agotests: vgrename duplicate rename
Zdenek Kabelac [Tue, 8 Oct 2013 09:16:00 +0000 (11:16 +0200)]
tests: vgrename duplicate rename

Test for rename of duplicated vgname (with different UUID)

11 years agothin: fix lvconvert in external origin conversion
Zdenek Kabelac [Tue, 8 Oct 2013 11:24:22 +0000 (13:24 +0200)]
thin: fix lvconvert in external origin conversion

Patch 562ad293fd52b8f3096b28bcac20e32aa1e8c1b0 introduced code regression
when LV was converted to a thin LV with external origin and at the same time,
conversion of LV to a thin pool has been requested.
(RHBZ: #997704)

data_lv needs to be assigned after test for external conversion find pool.

11 years agovgrename: run fullscan
Zdenek Kabelac [Tue, 8 Oct 2013 09:15:05 +0000 (11:15 +0200)]
vgrename: run fullscan

For vgrename run full scan so the command is able to properly
detect name collision.

11 years agolvchange: improve discards when pool active error
Alasdair G Kergon [Mon, 7 Oct 2013 22:50:09 +0000 (23:50 +0100)]
lvchange: improve discards when pool active error

Existing message deemed misleading:
  Cannot change discards state for active pool volume

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

11 years agopost-release
Alasdair G Kergon [Fri, 4 Oct 2013 13:41:32 +0000 (14:41 +0100)]
post-release

11 years agorelease 2.02.103 v2_02_103
Alasdair G Kergon [Fri, 4 Oct 2013 13:32:23 +0000 (14:32 +0100)]
release 2.02.103

52 files changed, 598 insertions(+), 264 deletions(-)

11 years agolvmetad: Fix vgname->vgid hash updates w/ duplicate VG names.
Petr Rockai [Fri, 4 Oct 2013 12:30:00 +0000 (14:30 +0200)]
lvmetad: Fix vgname->vgid hash updates w/ duplicate VG names.

11 years agoWHATS_NEW: renamed thin_pool_chunk_size_calculation -> policy
Peter Rajnoha [Fri, 4 Oct 2013 10:36:32 +0000 (12:36 +0200)]
WHATS_NEW: renamed thin_pool_chunk_size_calculation -> policy

11 years agothin: rename thin_pool_chunk_size_calculation -> ..size_policy and rename "default...
Peter Rajnoha [Fri, 4 Oct 2013 10:30:33 +0000 (12:30 +0200)]
thin: rename thin_pool_chunk_size_calculation -> ..size_policy and rename "default" policy to "generic"

Just to be consistent with existing naming we use.

11 years agocmdline: Add --ignoreskippedcluster.
Alasdair G Kergon [Tue, 1 Oct 2013 20:20:10 +0000 (21:20 +0100)]
cmdline: Add --ignoreskippedcluster.

Accept --ignoreskippedcluster with pvs, vgs, lvs, pvdisplay, vgdisplay,
lvdisplay, vgchange and lvchange to avoid the 'Skipping clustered
VG' errors when requesting information about a clustered VG
without using clustered locking and still exit with success.

The messages can still be seen with -v.

11 years agolibdm: export DM_UDEV_SUBSYSTEM_FLAG names for subystem udev flags
Peter Rajnoha [Mon, 30 Sep 2013 09:19:09 +0000 (11:19 +0200)]
libdm: export DM_UDEV_SUBSYSTEM_FLAG names for subystem udev flags

Just like we have symbolic names assigned to general DM udev flags
(DM_UDEV_* flags), we have the same for any subsystem flags now
(DM_SUBSYSTEM_UDEV_FLAG*), making it easier to use.

11 years agoudev: make subsystem rules responsible for importing subsystem flags
Peter Rajnoha [Mon, 30 Sep 2013 09:11:18 +0000 (11:11 +0200)]
udev: make subsystem rules responsible for importing subsystem flags

Each subsystem rule that needs to import any of DM_SUBSYSTEM_UDEV_FLAG*
flags is responsible for doing so. This simply moves control of these
flags from general 10-dm.rules to any subsystem rule using these flags
as each subsystem knows better how to handle these flags on its own.

11 years agothin: better dbg msgs and avoid uninit. value on chunk size recalc
Peter Rajnoha [Mon, 30 Sep 2013 06:58:57 +0000 (08:58 +0200)]
thin: better dbg msgs and avoid uninit. value on chunk size recalc

11 years agofix: also make commit b4637 work without dmeventd
Peter Rajnoha [Mon, 30 Sep 2013 06:17:56 +0000 (08:17 +0200)]
fix: also make commit b4637 work without dmeventd

11 years agoudev: fix 3min udev timeout so that it is applied for all LVM volumes
Peter Rajnoha [Fri, 27 Sep 2013 13:37:16 +0000 (15:37 +0200)]
udev: fix 3min udev timeout so that it is applied for all LVM volumes

The timeout should be set before any volume skipping.

11 years agofix: make it possible to compile with --disable-devmapper again
Peter Rajnoha [Fri, 27 Sep 2013 11:58:55 +0000 (13:58 +0200)]
fix: make it possible to compile with --disable-devmapper again

Some code has been added recently which makes it impossible to compile
when "configure --disable-devmapper" is used. This patch just shuffles
the code around so it's under proper #ifdef DEVMAPPER_SUPPORT.

11 years agoRAID: Fix _sufficient_pes_free calculation for RAID
Jonathan Brassow [Thu, 26 Sep 2013 16:30:07 +0000 (11:30 -0500)]
RAID: Fix _sufficient_pes_free calculation for RAID

lib/metadata/lv_manip.c:_sufficient_pes_free() was calculating the
required space for RAID allocations incorrectly due to double
accounting.  This resulted in failure to allocate when available
space was tight.

When RAID data and metadata areas are allocated together, the total
amount is stored in ah->new_extents and ah->alloc_and_split_meta is
set.  '_sufficient_pes_free' was adding the necessary metadata extents
to ah->new_extents without ever checking ah->alloc_and_split_meta.
This often led to double accounting of the metadata extents.  This
patch checks 'ah->alloc_and_split_meta' to perform proper calculations
for RAID.

This error is only present in the function that checks for the needed
space, not in the functions that do the actual allocation.

11 years agoWHATS_NEW: description for previous commit
Jonathan Brassow [Thu, 26 Sep 2013 03:35:52 +0000 (22:35 -0500)]
WHATS_NEW: description for previous commit

commit 098896fb2905cd02d02b7271be489e32d86c073d failed to include
description of what was fixed.

"Conversion from linear to mirror or RAID1 now honors
 mirror_segtype_default."

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