]> sourceware.org Git - lvm2.git/log
lvm2.git
9 years agoraid: lock holder will skip visible raid LVs
Zdenek Kabelac [Wed, 28 Jan 2015 12:34:41 +0000 (13:34 +0100)]
raid: lock holder will skip visible raid LVs

RAID marks legs as VISIBLE with notion it's not longer
true raid leg - so skip tree scannig and take this LV
as top-level LV.

9 years agoraid: fix raid image splitting
Zdenek Kabelac [Wed, 28 Jan 2015 12:39:41 +0000 (13:39 +0100)]
raid: fix raid image splitting

When raid leg is extracted, now the preload code handles this state
correctly and put proper new table entry into dm tree,
so the activation of extracted leg and removed metadata works
after commit.

9 years agoraid: fix tree preload for splitting raid images
Zdenek Kabelac [Wed, 28 Jan 2015 12:36:25 +0000 (13:36 +0100)]
raid: fix tree preload for splitting raid images

When raid is being splitted, extracted leg & metadata
is still floating in the table - and thus we need to
detect this case and properly preload their matching
table so consequent activation of extracted LVs properly
renames (and FREES) existing raid images, so ongoing
image name shifting will work.

9 years agodevices: DASD doesn't need to be stackable.
Alasdair G Kergon [Fri, 23 Jan 2015 20:32:31 +0000 (20:32 +0000)]
devices: DASD doesn't need to be stackable.

9 years agodevices: Do not support unpartitioned DASD.
Alasdair G Kergon [Fri, 23 Jan 2015 20:01:34 +0000 (20:01 +0000)]
devices: Do not support unpartitioned DASD.

9 years agolvm.conf: update error_when_full description
David Teigland [Thu, 22 Jan 2015 19:01:02 +0000 (13:01 -0600)]
lvm.conf: update error_when_full description

Relate it to the --errorwhenfull option.

9 years agolvmthin: update monitor and autoextend
David Teigland [Thu, 22 Jan 2015 18:52:39 +0000 (12:52 -0600)]
lvmthin: update monitor and autoextend

and some more in data exhaustion

9 years agocoverity: missing return value check
Peter Rajnoha [Thu, 22 Jan 2015 09:11:19 +0000 (10:11 +0100)]
coverity: missing return value check

Reported by coverity for code added recently - _avoid_pvs_with_other_images_of_lv
which calls process_each_sub_lv and not checking return value.

9 years agolvmthin: update data space exhaustion
David Teigland [Wed, 21 Jan 2015 17:08:12 +0000 (11:08 -0600)]
lvmthin: update data space exhaustion

9 years agoconfig: improve config validation to check if setting with string value can be empty.
Peter Rajnoha [Wed, 21 Jan 2015 15:44:02 +0000 (16:44 +0100)]
config: improve config validation to check if setting with string value can be empty.

For example, with dmeventd/executable set to "" which is not allowed for
this setting, the config validation now ends up with:

$ lvm dumpconfig --validate
  Configuration setting "dmeventd/executable" invalid. It cannot be set to an empty value.
  LVM configuration invalid.

This check for empty values for string config settings was not
done before (we only checked empty arrays, but not scalar strings).

9 years agopost-release
Alasdair G Kergon [Wed, 21 Jan 2015 13:25:10 +0000 (13:25 +0000)]
post-release

9 years agopre-release v2_02_115
Alasdair G Kergon [Wed, 21 Jan 2015 13:08:12 +0000 (13:08 +0000)]
pre-release

9 years agodmeventd: Reduce waitevent EINTR message severity.
Alasdair G Kergon [Wed, 21 Jan 2015 12:54:00 +0000 (12:54 +0000)]
dmeventd: Reduce waitevent EINTR message severity.

9 years agolibdevmapper: Improve incompatible version msg.
Alasdair G Kergon [Wed, 21 Jan 2015 12:23:56 +0000 (12:23 +0000)]
libdevmapper: Improve incompatible version msg.

9 years agocleanup: for commit 7bcb3fb02d6aacc566871326c0d01c331497a5b2
Peter Rajnoha [Wed, 21 Jan 2015 10:28:58 +0000 (11:28 +0100)]
cleanup: for commit 7bcb3fb02d6aacc566871326c0d01c331497a5b2

9 years agoreport: rename lv_error_when_full field to lv_when_full and display either "error...
Peter Rajnoha [Wed, 21 Jan 2015 09:43:40 +0000 (10:43 +0100)]
report: rename lv_error_when_full field to lv_when_full and display either "error", "queue" or ""

Rename original lv_error_when_full field to lv_when_full and also
convert it from binary field to string field displaying three
possible values: "error", "queueu" or "" (blank for undefined).

$ lvs vg/pool vg/pool1 vg/linear_lv -o+lv_when_full
  LV        VG   Attr       LSize Data%  Meta%  WhenFull
  linear_lv vg   -wi-a----- 4.00m
  pool      vg   twi-aotz-- 4.00m 0.00   0.98   queue
  pool1     vg   twi-a-tz-- 4.00m 0.00   0.88   error

For -S|--select these synonyms are recognized:

"error" -> "error when full", "error if no space"
"queue" -> "queue when full", "queue if no space"
   ""   -> "undefined"

9 years agolvmthin: include errorwhenfull
David Teigland [Tue, 20 Jan 2015 16:45:47 +0000 (10:45 -0600)]
lvmthin: include errorwhenfull

and don't display the size of pmspare to avoid setting an
expectation of a specific size.

9 years agovgimportclone: remove arg check that uses pvs
David Teigland [Tue, 20 Jan 2015 19:08:22 +0000 (13:08 -0600)]
vgimportclone: remove arg check that uses pvs

The arg check using pvs is unnecessary.  If the arg is not a PV,
the command will just fail later.  Using the pvs command at this
point in the command is a problem when lvmetad is running, because
the pvs command does not report duplicate PVs when using lvmetad.
(Alternatively, use_lvmetad could be disabled by adding a --config
override to this pvs command.)

9 years agoreport: Fix warning in _str_list_append.
Alasdair G Kergon [Tue, 20 Jan 2015 17:15:28 +0000 (17:15 +0000)]
report: Fix warning in _str_list_append.

../../lib/report/report.c: In function ‘_str_list_append’:
../../lib/report/report.c:256: warning: declaration of ‘dup’ shadows a global declaration

9 years agoreport: proper lv_attr_dup emulation
Zdenek Kabelac [Tue, 20 Jan 2015 15:24:45 +0000 (16:24 +0100)]
report: proper lv_attr_dup emulation

We need to create a mempool for proper emulation of lv_attr_dup
for lvm2api.

9 years agoreport: add separate LVSINFOSTATUS field type for info+status combined fields
Peter Rajnoha [Tue, 20 Jan 2015 15:02:48 +0000 (16:02 +0100)]
report: add separate LVSINFOSTATUS field type for info+status combined fields

Add separate LVSINFOSTATUS field type for fields which display both
dm info-like and dm status-like information.

The internal interface is there with the introduction of LVSSTATUS
field type which can cope with the combination of LVSSTATUS
and LVSINFO field types (several fields).

However, till now, we considered that *single* field can display
either LVSINFO or LVSSTATUS, but not both at the same time.

Till now, we haven't had single field which needs both - hence
add LVSINFOSTATUS field type for such fields as we currently
need this for the lv_attr field which requires combination of
info and status.

This patch just adds interface for an ability to register such fields
(the code that copes with this is already in).

9 years agothin: support errorwhenfull with thin creation
Zdenek Kabelac [Tue, 20 Jan 2015 14:43:16 +0000 (15:43 +0100)]
thin: support errorwhenfull with thin creation

When thinpool and thinvolume are created at the same time,
still support usage of --errorwhenfull.

9 years agoreport: use info
Zdenek Kabelac [Tue, 20 Jan 2015 14:25:05 +0000 (15:25 +0100)]
report: use info

Use LVSINFO since  LVSSTATUS only fills status

9 years agocleanup: indent
Zdenek Kabelac [Tue, 20 Jan 2015 11:43:16 +0000 (12:43 +0100)]
cleanup: indent

9 years agoman: errorwhenfull doc
Zdenek Kabelac [Thu, 15 Jan 2015 14:20:57 +0000 (15:20 +0100)]
man: errorwhenfull doc

9 years agoreport: seg_monitor undefined
Zdenek Kabelac [Tue, 20 Jan 2015 13:36:21 +0000 (14:36 +0100)]
report: seg_monitor  undefined

Add 'undefined' value for segment which do not support monitoring.
Fixes crash for commands like 'pvs -o+seg_monitor'.

9 years agoreport: update report_object API
Zdenek Kabelac [Tue, 20 Jan 2015 12:16:41 +0000 (13:16 +0100)]
report: update report_object API

Internal API change - pass single struct for both info & seg_status.

9 years agoreport: use same info also for lv_attr
Zdenek Kabelac [Tue, 20 Jan 2015 12:14:16 +0000 (13:14 +0100)]
report: use same info also for  lv_attr

Recently the single 'status' code has been used for number of cache
features.

Extend the API a little bit to allow usage also for lv_attr_dup.

As the function itself is used in lvm2api - add a new function:
lv_attr_dup_with_info_and_seg_status() that is able to use
grabbed info & status information.

report_init() is now using directly passed lvdm struct pointer
which holds the infomation whether lv_info() was correctly obtained or
there was some error when trying to read it.

Move 'healt' attribute to status.
TODO convert raid function to use the already known status.

9 years agoreport: reporting unknown status
Zdenek Kabelac [Tue, 20 Jan 2015 11:38:38 +0000 (12:38 +0100)]
report: reporting unknown status

Add SEG_STATUS_UNKNOWN when status cannot be parsed.
Also add 'info_ok' variable when info was correctly obtained.

9 years agothin: lvchange support for errorwhenfull
Zdenek Kabelac [Thu, 15 Jan 2015 14:20:08 +0000 (15:20 +0100)]
thin: lvchange support for errorwhenfull

Support lvchange --errorwhenfull y|n for thin pools.

9 years agocleanup: add lv_is_error_when_full() macro
Zdenek Kabelac [Thu, 15 Jan 2015 14:19:00 +0000 (15:19 +0100)]
cleanup: add lv_is_error_when_full() macro

Like with other status bits use macro for testing.
(in-release update)

9 years agovgimportclone: Say safe to ignore lvmetad message.
Alasdair G Kergon [Sat, 17 Jan 2015 11:29:38 +0000 (11:29 +0000)]
vgimportclone: Say safe to ignore lvmetad message.

9 years agoman: Remove renamed writebehind field from lvs.8.
Alasdair G Kergon [Sat, 17 Jan 2015 11:05:25 +0000 (11:05 +0000)]
man: Remove renamed writebehind field from lvs.8.

9 years agolibdm-report: Fix order of NULL dm_report check.
Alasdair G Kergon [Sat, 17 Jan 2015 10:50:54 +0000 (10:50 +0000)]
libdm-report: Fix order of NULL dm_report check.

9 years agoraid_manip: v2 fix multi-segment misallocation on 'lvconvert --repair'
Heinz Mauelshagen [Fri, 16 Jan 2015 12:44:16 +0000 (13:44 +0100)]
raid_manip: v2 fix multi-segment misallocation on 'lvconvert --repair'

The previous patch felt short WRT disabling allocation on PVs holding other
legs of the RAID LV persistently; this patch introduces an internal,
transient PV flag PV_ALLOCATION_PROHIBITED to address this very problem.

General problem description for completeness:

An 'lvconvert --repair $RAID_LV" to replace a failed leg of a multi-segment
RAID10/4/5/6 logical volume can lead to allocation of (parts of) the replacement
image component pair on the physical volume of another image component
(e.g. image 0 allocated on the same PV as image 1 silently impeding resilience).

Patch fixes this severe resilince issue by prohibiting allocation on PVs
already holding other legs of the RAID set. It allows to allocate free space
on any operational PV already holding parts of the image component pair.

9 years agoWHATS_NEW: previous commits related to duplicate PVs
David Teigland [Wed, 14 Jan 2015 20:52:12 +0000 (14:52 -0600)]
WHATS_NEW: previous commits related to duplicate PVs

9 years agotoollib: search for duplicate PVs only when needed
David Teigland [Wed, 14 Jan 2015 20:38:05 +0000 (14:38 -0600)]
toollib: search for duplicate PVs only when needed

A full search for duplicate PVs in the case of pvs -a
is only necessary when duplicates have previously been
detected in lvmcache.  Use a global variable from lvmcache
to indicate that duplicate PVs exist, so we can skip the
search for duplicates when none exist.

9 years agotoollib: pvs -a should display VG name for each duplicate PV
David Teigland [Wed, 14 Jan 2015 20:16:03 +0000 (14:16 -0600)]
toollib: pvs -a should display VG name for each duplicate PV

Previously, 'pvs -a' displayed the VG name for only the device
associated with the cached PV (pv->dev), and other duplicate
devices would have a blank VG name.  This commit displays the
VG name for each of the duplicate devices.  The cost of doing
this is not small: for each PV processed, the list of all
devices must be searched for duplicates.

9 years agotoollib: override the PV device with duplicates
David Teigland [Tue, 13 Jan 2015 22:16:22 +0000 (16:16 -0600)]
toollib: override the PV device with duplicates

When multiple duplicate devices are specified on the
command line, the PV is processed once for each of them,
but pv->dev is the device used each time.

This overrides the PV device to reflect the duplicate
device that was specified on the command line.  This is
done by hacking the lvmcache to replace pv->dev with the
device of the duplicate being processed.  (It would be
preferable to override pv->dev without munging the content
of the cache, and without sprinkling special cases throughout
the code.)

This override only applies when multiple duplicate devices are
specified on the command line.  When only a single duplicate
device of pv->dev is specified, the priority is to display the
cached pv->dev, so pv->dev is not overridden by the named
duplicate device.

In the examples below, loop3 is the cached device referenced
by pv->dev, and is given priority for processing.  Only after
loop3 is processed/displayed, will other duplicate devices
loop0/loop1 appear (when requested on the command line.)

With two duplicate devices, loop0 and loop3:

  # pvs
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop0
  PV         VG           Fmt  Attr PSize   PFree
  /dev/loop3 loopa        lvm2 a--   12.00m  12.00m

  # pvs /dev/loop3
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop0
  PV         VG    Fmt  Attr PSize  PFree
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m

  # pvs /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop0
  PV         VG    Fmt  Attr PSize  PFree
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m

  # pvs -o+dev_size /dev/loop0 /dev/loop3
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop0
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop0 loopa lvm2 a--  12.00m 12.00m  16.00m
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

With three duplicate devices, loop0, loop1, loop3:

  # pvs -o+dev_size
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG           Fmt  Attr PSize   PFree   DevSize
  /dev/loop3 loopa        lvm2 a--   12.00m  12.00m  32.00m

  # pvs -o+dev_size /dev/loop3
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop1
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop3 /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop0 loopa lvm2 a--  12.00m 12.00m  16.00m
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop3 /dev/loop1
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop1 loopa lvm2 a--  12.00m 12.00m  32.00m
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop0 /dev/loop1
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop1 loopa lvm2 a--  12.00m 12.00m  32.00m
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

  # pvs -o+dev_size /dev/loop0 /dev/loop1 /dev/loop3
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop1 not /dev/loop0
  Found duplicate PV XhLbpVo0hmuwrMQLjfxuAvPFUFZqD4vr: using /dev/loop3 not /dev/loop1
  PV         VG    Fmt  Attr PSize  PFree  DevSize
  /dev/loop0 loopa lvm2 a--  12.00m 12.00m  16.00m
  /dev/loop1 loopa lvm2 a--  12.00m 12.00m  32.00m
  /dev/loop3 loopa lvm2 a--  12.00m 12.00m  32.00m

9 years agotoollib: handle duplicate pvs in process_in_pv
David Teigland [Fri, 9 Jan 2015 20:55:16 +0000 (14:55 -0600)]
toollib: handle duplicate pvs in process_in_pv

Processes a PV once for each time a device with its PV ID
exists on the command line.

This fixes a regression in the case where:

. devices /dev/sdA and /dev/sdB where clones (same PV ID)

. the cached VG references /dev/sdA

. before the regression, the command: pvs /dev/sdB
  would display the cached device clone /dev/sdA

. after the regression, pvs /dev/sdB would display nothing,
  causing vgimportclone /dev/sdB to fail.

. with this fix, pvs /dev/sdB displays /dev/sdA

Also, pvs /dev/sdA /dev/sdB will report two lines, one for each
device on the command line, but /dev/sdA is displayed for each.

This only works without lvmetad.

9 years agodmeventd: Call lvscan --cache also for mirrors (in addition to RAID).
Petr Rockai [Wed, 14 Jan 2015 17:04:46 +0000 (18:04 +0100)]
dmeventd: Call lvscan --cache also for mirrors (in addition to RAID).

9 years agoWHATS_NEW
Zdenek Kabelac [Wed, 14 Jan 2015 14:15:29 +0000 (15:15 +0100)]
WHATS_NEW

More news

9 years agothin: errrorwhenfull support
Zdenek Kabelac [Tue, 13 Jan 2015 14:23:03 +0000 (15:23 +0100)]
thin: errrorwhenfull support

Support error_if_no_space feature for thin pools.
Report more info about thinpool status:
(out_of_data (D), metadata_read_only (M), failed  (F) also as health
attribute.)

9 years agocleanup: missed for build without devmapper
Zdenek Kabelac [Wed, 14 Jan 2015 12:03:52 +0000 (13:03 +0100)]
cleanup: missed for build without devmapper

configure --disable-devmapper build fixes.

9 years agolv_status: enable lv_status for thinpool
Zdenek Kabelac [Wed, 14 Jan 2015 11:51:03 +0000 (12:51 +0100)]
lv_status: enable lv_status for thinpool

Support also status for thin pools.

9 years agolv_status: track layered device
Zdenek Kabelac [Wed, 14 Jan 2015 11:52:40 +0000 (12:52 +0100)]
lv_status: track layered device

For info of i.e. thin-pool we need layered device.
Needs some more thinking about proper interface here.
For now it's usable for cache and thin-pool.

9 years agocleanup: properly align code lines
Zdenek Kabelac [Wed, 14 Jan 2015 11:51:59 +0000 (12:51 +0100)]
cleanup: properly align code lines

Misaligned indetion in branches.

9 years agocleanup: update API for segment reporting
Zdenek Kabelac [Wed, 14 Jan 2015 09:31:24 +0000 (10:31 +0100)]
cleanup: update API for segment reporting

API for seg reporting is breaking internal lvm coding - it cannot
use vgmem mem pool for allocation of reported value.
So use separate pool instead of 'vgmem' for non vg related allocations

Add consts for many function params - but still many other are left
for now as non-const - needs deeper level of change even on libdm side.

9 years agoraid_manip: fix multi-segment misallocation on 'lvconvert --repair'
Heinz Mauelshagen [Wed, 14 Jan 2015 12:41:55 +0000 (13:41 +0100)]
raid_manip: fix multi-segment misallocation on 'lvconvert --repair'

An 'lvconvert --repair $RAID_LV" to replace a failed leg of a multi-segment
RAID10/4/5/6 logical volume can lead to allocation of (parts of) the replacement
image component pair on the physical volume of another image component
(e.g. image 0 allocated on the same PV as image 1 silently impeding resilience).

Patch fixes this severe resilince issue by prohibiting allocation on PVs
already holding other legs of the RAID set. It allows to allocate free space
on any operational PV already holding parts of the image component pair.

9 years agotests: pvscan --cache DevicePath does not fail if the device is just filtered
Peter Rajnoha [Mon, 12 Jan 2015 14:16:57 +0000 (15:16 +0100)]
tests: pvscan --cache DevicePath does not fail if the device is just filtered

It's not an error if the device is filtered out and hence cleared from
lvmetad cache - "pvscan --cache DevPath" has now the same behaviour in
this case as "pvscan --cache major:minor" (which is more consistent).

Before, the tests expected failure return code for "pvscan --cache DevicePath"
if the device was filtered (which is a different situation if the device
is missing in the system completely!).

9 years agodev-type: filter out partitioned device-mapper devices as unsuitable for use as PVs
Peter Rajnoha [Mon, 12 Jan 2015 13:02:57 +0000 (14:02 +0100)]
dev-type: filter out partitioned device-mapper devices as unsuitable for use as PVs

Normally, if there are partitions defined on top of device-mapper
device, there should be a device-mapper device created for each
partiton on top of the old one and once the underlying DM device
is used by another devices (partition mappings in this case),
it can't be used as a PV anymore.

However, sometimes, it may happen the partition mappings are
missing - either the partitioning tool is not creating them if
it does not contain full support for device-mapper devices or
the mappings were removed.

Better safe than sorry - check for partition header on DM devs
and filter them out as unsuitable for PVs in case the check is
positive. Whatever the user is doing, let's do our best to prevent
unwanted corruption (...by running pvcreate on top of such device
that would corrupt the partition header).

9 years agopvscan: notify lvmetad about device that is gone and pvscan is run with device path...
Peter Rajnoha [Mon, 12 Jan 2015 12:50:11 +0000 (13:50 +0100)]
pvscan: notify lvmetad about device that is gone and pvscan is run with device path instead of major:minor pair

If pvscan is run with device path instead of major:minor pair and this
device still exists in the system and the device is not visible anymore
(due to a filter that is applied), notify lvmetad properly about this.

This makes it more consistent with respect to existing pvscan with
major:minor which already notifies lvmetad about device that is gone
due to filters.

However, if the device is not in the system anymore, we're not able
to translate the original device path into major:minor pair which
lvmetad needs for its action (lvmetad_pv_gone fn). So in this case,
we still need to use major:minor pair only, not device path. But at
least make "pvscan --cache DevicePath" as near as possible to "pvscan
--cahce <major>:<minor>" functionality.

Also add a note to pvscan man page about this difference when using
pvscan --cache with DevicePath and major:minor pair.

9 years agotoollib: process_each_pv should match by device
David Teigland [Wed, 7 Jan 2015 20:04:12 +0000 (14:04 -0600)]
toollib: process_each_pv should match by device

When processing PVs specified on the command line, the arg
name was being matched against pv_dev_name, which will not
always work:

- The PV specified on the command line could be an alias,
  e.g. /dev/disk/by-id/...

- The PV specified on the command line could be any random
  path to the device, e.g. /dev/../dev/sdb

To fix this, first resolve the named PV args to struct device's,
then iterate through the devices for processing.

9 years agoscripts: clvmd: replace awk functionality with LVM's selection
Peter Rajnoha [Fri, 9 Jan 2015 15:34:16 +0000 (16:34 +0100)]
scripts: clvmd: replace awk functionality with LVM's selection

No need to use awk now to get appropriate VGs/LVs, use LVM's
own --select - it's quicker, it removes a need for external
dependency on awk and it's also more readable.

9 years agometadata: add "Failed to write VG <vg_name>." on failed vg_write and revert previous...
Peter Rajnoha [Fri, 9 Jan 2015 13:04:44 +0000 (14:04 +0100)]
metadata: add "Failed to write VG <vg_name>." on failed vg_write and revert previous patch

Better than previous patch which changed log_warn to log_error -
we can have multiple MDAs and if one of them fails to be written,
we can still continue with other MDAs if we're in a mode where
we can handle missing PVs - so keep the log_warn for single
failed MDA write as it was before.

However, add log_error with "Failed to write VG <vg_name>." in
case we're not handling missing PVs or no MDA was written at all
during VG write process. This also prevents an internal error in
which the vg_write fails and we're not issuing any other log_error
in vg_write caller or above, so we end up with:
  "Internal error: Failed command did not use log_error".

9 years agometadata: log_error instead of log_warn on failed mda write
Peter Rajnoha [Fri, 9 Jan 2015 11:00:03 +0000 (12:00 +0100)]
metadata: log_error instead of log_warn on failed mda write

9 years agoWHATS_NEW: line for previous commit
Peter Rajnoha [Fri, 9 Jan 2015 10:57:25 +0000 (11:57 +0100)]
WHATS_NEW: line for previous commit

9 years agodev_manager: do not mark snapshot origins as unusable devices just because of possibl...
Peter Rajnoha [Fri, 9 Jan 2015 10:24:16 +0000 (11:24 +0100)]
dev_manager: do not mark snapshot origins as unusable devices just because of possible blocked mirror underneath

At first, all snapshot-origins where marked as unusable unconditionally
here, but we can't cut off whole snapshot-origin use in a stack just
because of this possible mirror state. This whole "device_is_usable"
check was even incorrectly part of persistent filter before commit
a843d0d97c66aae1872c05b0f6cf4bda176aae2 (where filter cleanup was
done).

The persistent filter is used only if obtain_device_list_from_udev=0,
which means that the former check for snapshot-origin here had not even
been hit with default configuration for a few years before commit
a843d0d97c66aae1872c05b0f6cf4bda176aae2 (the check for snapshot-origin and
skipping of this LV was introduced with commit a71d6051ed3d72af6895733c599cc44b49f24dbb
back in 2010).

The obtain_device_list_from_udev=1 (and hence not using persistent
filter and hence not hitting this check for snapshot-origins and skipping) has been
in action since commit edcda01a1e18af6599275801a8237fe10112ed6f (that is 2011).
So for 3 years this condition was not even checked with default configuration,
making it superfluous.

This all changed in 2014 with commit 8a843d0d97c66aae1872c05b0f6cf4bda176aae2
where "filter-usable" is introduced  and since then all snapshot-origins
have been marked as unusable more often than before and making snapshot-origins
practically unusable in a stack.

This patch removes this incorrect check from commit a71d6051ed3d72af6895733c599cc44b49f24dbb
which caused snapshot-origins to be unusable more often recently.

If we want to fix this eventually in a correct way, we need to look
down the stack and if snapshot-origin is hit and there's a blocked
mirror underneath, only then mark the device as unusable. But mirrors
in stack are not supported anymore so it's questionable whether it's
worth spending more time on this at all...

9 years agoWHATS_NEW: previous commit
Peter Rajnoha [Wed, 7 Jan 2015 12:47:16 +0000 (13:47 +0100)]
WHATS_NEW: previous commit

9 years agoraid: fix mirror image naming when converting from mirror to raid1
Heinz Mauelshagen [Wed, 7 Jan 2015 12:25:08 +0000 (13:25 +0100)]
raid: fix mirror image naming when converting from mirror to raid1

$ lvcreate -l1 -m1 --type mirror vg
  Logical volume "lvol0" created.
$ lvconvert --type raid1 vg/lvol0

Before:
$ lvs -a vg
  LV                        VG     Active Attr       LSize   Cpy%Sync Layout     Role
  lvol0                     vg     active rwi-a-r---   4.00m 100.00   raid,raid1 public
  [lvol0_mimage_0_rimage_0] vg     active iwi-aor---   4.00m          linear     private,raid,image
  [lvol0_mimage_1_rimage_1] vg     active iwi-aor---   4.00m          linear     private,raid,image
  [lvol0_rmeta_0]           vg     active ewi-aor---   4.00m          linear     private,raid,metadata
  [lvol0_rmeta_1]           vg     active ewi-aor---   4.00m          linear     private,raid,metadata

Incorrect name: lvol0_mimage_0_rimage_0

With this patch applied:
$ lvs -a vg
  LV               VG   Active Attr       LSize Cpy%Sync Layout     Role
  lvol0            vg   active rwi-a-r--- 4.00m 100.00   raid,raid1 public
  [lvol0_rimage_0] vg   active iwi-aor--- 4.00m          linear     private,raid,image
  [lvol0_rimage_1] vg   active iwi-aor--- 4.00m          linear     private,raid,image
  [lvol0_rmeta_0]  vg   active ewi-aor--- 4.00m          linear     private,raid,metadata
  [lvol0_rmeta_1]  vg   active ewi-aor--- 4.00m          linear     private,raid,metadata

Proper name: lvol0_rimage_0

9 years agomirror: do not try to reactivate inactive mirror when removing its LVs which have...
Peter Rajnoha [Wed, 7 Jan 2015 09:52:38 +0000 (10:52 +0100)]
mirror: do not try to reactivate inactive mirror when removing its LVs which have missing PVs

When mirror has missing PVs and there are mirror images on those missing
PVs, we delete the images and during this delete operation, we also
reactivate the LV. But if we're trying to reactivate the LV in cluster
which is not active and at the same time cmirrord is not running (which
is OK since we may have created the mirror LV as inactive), we end up
with:
  "Error locking on node <node_name>: Shared cluster mirrors are not available."

That is because we're trying to activate the mirror LV without cmirrord.
However, there's no need to do this reactivation if the mirror LV (and
hence it's sub LVs) were not activated before.

This issue caused failure in mirror-vgreduce-removemissing.sh test
recently with this sequence (excerpt from the test script):

  prepare_lvs_
  lvcreate -an -Zn -l2 --type mirror -m1 --nosync -n $lv1 $vg "$dev1" $dev2" "$dev3":$BLOCKS
  mimages_are_on_ $lv1 "$dev1" "$dev2"
  mirrorlog_is_on_ $lv1 "$dev3"
  aux disable_dev "$dev2"
  vgreduce --removemissing --force $vg

The important thing about that test is that we're not running cmirrord,
we're activating the mirror with "-an" so it's inactive and then
vgreduce --removemissing tries to reactivate the mirror images
as part of the _delete_lv function call inside and since cmirrord
is not running, we end up with the "Shared cluster mirrors are not
available." error.

9 years agopvremove: Avoid metadata re-reads & related error messages.
Petr Rockai [Tue, 6 Jan 2015 13:17:53 +0000 (14:17 +0100)]
pvremove: Avoid metadata re-reads & related error messages.

9 years agolvmetad: Re-use fmt from the VG for PVs when possible.
Petr Rockai [Tue, 6 Jan 2015 11:39:57 +0000 (12:39 +0100)]
lvmetad: Re-use fmt from the VG for PVs when possible.

9 years agocmirror: do not check for cmirror availability when creating deactivated cluster...
Peter Rajnoha [Tue, 6 Jan 2015 08:59:04 +0000 (09:59 +0100)]
cmirror: do not check for cmirror availability when creating deactivated cluster mirrors

When creating cluster mirrors while they're not supposed to be activated
immediately after creation, we don't need to check for cmirrord availability.
We can just create these mirrors and let the check to be done on activation
later on. This is addendum for commit cba6186325f0d5806cf1ddec276b3bb8e178687a.

9 years agocmirror: check for cmirror availability during cluster mirror creation and activation
Peter Rajnoha [Mon, 5 Jan 2015 15:45:30 +0000 (16:45 +0100)]
cmirror: check for cmirror availability during cluster mirror creation and activation

When creating/activating clustered mirrors, we should have cmirrord
available and running. If it's not, we ended up with rather cryptic
errors like:

$ lvcreate -l1 -m1 --type mirror vg
  Error locking on node 1: device-mapper: reload ioctl on  failed: Invalid argument
  Failed to activate new LV.

$ vgchange -ay vg
  Error locking on node node 1: device-mapper: reload ioctl on failed: Invalid argument

This patch adds check for cmirror availability and it errors out
properly, also giving a more precise error messge so users are able
to identify the source of the problem easily:

$ lvcreate -l1 -m1 --type mirror vg
  Shared cluster mirrors are not available.

$ vgchange -ay vg
  Error locking on node 1: Shared cluster mirrors are not available.

Exclusively activated cluster mirror LVs are OK even without cmirrord:

$ vgchange -aey vg
  1 logical volume(s) in volume group "vg" now active

9 years agolibdm: report: add more comments about helper macros to get reserved values
Peter Rajnoha [Fri, 19 Dec 2014 08:17:16 +0000 (09:17 +0100)]
libdm: report: add more comments about helper macros to get reserved values

Since GET_FIELD_RESERVED_VALUE always returns a pointer, don't reference
it with "&" when used - we already have that pointer value (this is an
addendum to recent commit 028ff309472834e82fe4b849ea4c243feb5098b9).

Only GET_TYPE_RESERVED_VALUE needs to be referenced with "&" as it
returns directly the value of that type.

9 years agoreport: fix segfault on NULL value hit in cache_settings field
Peter Rajnoha [Thu, 18 Dec 2014 15:12:50 +0000 (16:12 +0100)]
report: fix segfault on NULL value hit in cache_settings field

We have to use empty list, not NULL if we want to denote that the list
has no items. Otherwise, the code further can segfault as it expects
there's always a sane value (= some list), including empty list,
but never NULL.

9 years agoreport: properly set "undefined" reserved value for cache_policy field
Peter Rajnoha [Thu, 18 Dec 2014 14:11:25 +0000 (15:11 +0100)]
report: properly set "undefined" reserved value for cache_policy field

Use helper macros to handle reserved values and also define "undefined"
reserved value as:

FIELD_RESERVED_VALUE(cache_policy, cache_policy_undef, "", "", "undefined")

Which means:

 - print "" if the cache_policy value is undefined (the first name for this reserved value is "")
 - recognize "undefined" reserved name as synonym to ""
   (so statements like "lvs -S cache_policy=undefined" are still recognized)

9 years agocleanup: use helper macros to get reserved value from values.h for vg_mda_copies...
Peter Rajnoha [Thu, 18 Dec 2014 13:52:16 +0000 (14:52 +0100)]
cleanup: use helper macros to get reserved value from values.h for vg_mda_copies and lv_read_ahead fields

Avoid making a copy of the keyword which is already registered in
values.h for "unmanaged" (vg_mda_copies field) and "auto" reserved
value (lv_read_ahead field). Also use helper macros to handle these
reserved - this is the correct approach - just do not copy the same
thing again and do not mix it! The GET_FIELD_RESERVED_VALUE and
GET_FIRST_RESERVED_NAME macros guarantees this - use it!

In addition to that, rename reserved values:
  vg_mda_copies --> vg_mda_copies_unmanaged
  lv_read_ahead --> lv_read_ahead_auto

So the field reserved values follows this scheme:

   "<field_name>_<reserved_value_name>".

The same applies for type reserved values with this scheme:

  "<report type name in lowercase>_<reserved_value_name>"

Add a comment about this scheme for others to follow as well
when adding new fields and their reserved values. This makes
it a bit easier to read the code then.

9 years agorefactor: rename existing helper macros for reserved value handling and add GET_FIELD...
Peter Rajnoha [Thu, 18 Dec 2014 13:42:14 +0000 (14:42 +0100)]
refactor: rename existing helper macros for reserved value handling and add GET_FIELD_RESERVED_VALUE macro

RESERVED(id)   --> GET_TYPE_RESERVED_VALUE(id)
FIRST_NAME(id) --> GET_FIRST_RESERVED_NAME(id)

Also add GET_FIELD_RESERVED_VALUE(id) macro to get per-field reserved value.

This makes it much more readable and hopefully it'll make it
easier to use these helper macros when adding new reporting
fields with reserved values if needed.

9 years agoreport: dup cache policy name string for report in cache_policy field
Peter Rajnoha [Thu, 18 Dec 2014 10:54:40 +0000 (11:54 +0100)]
report: dup cache policy name string for report in cache_policy field

The cache policy name taken as LV segment property must be duped
for report as the VG/LV/seg structure is destroyed after processing,
reporting happens later:

$ valgrind lvs -o+cache_policy
...
==16589== Invalid read of size 1
==16589==    at 0x54ABCC3: dm_report_compact_fields
(libdm-report.c:1739)
==16589==    by 0x153FC7: _report (reporter.c:619)
==16589==    by 0x1540A6: lvs (reporter.c:641)
==16589==    by 0x148021: lvm_run_command (lvmcmdline.c:1452)
==16589==    by 0x1495CB: lvm2_main (lvmcmdline.c:1907)
==16589==    by 0x164712: main (lvm.c:21)
==16589==  Address 0x7d465f2 is 8,338 bytes inside a block of size
16,384 free'd
==16589==    at 0x4C2ACE9: free (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==16589==    by 0x54B8C85: _free_chunk (pool-fast.c:318)
==16589==    by 0x54B84FB: dm_pool_destroy (pool-fast.c:78)
==16589==    by 0x1E59C7: _free_vg (vg.c:78)
==16589==    by 0x1E5A6D: release_vg (vg.c:95)
==16589==    by 0x159B6E: _process_lv_vgnameid_list (toollib.c:1967)
==16589==    by 0x159DD7: process_each_lv (toollib.c:2030)
==16589==    by 0x153ED8: _report (reporter.c:598)
==16589==    by 0x1540A6: lvs (reporter.c:641)
==16589==    by 0x148021: lvm_run_command (lvmcmdline.c:1452)
==16589==    by 0x1495CB: lvm2_main (lvmcmdline.c:1907)
==16589==    by 0x164712: main (lvm.c:21)

9 years agolibdm: report: also check whether field type is supported for field-specific reserved...
Peter Rajnoha [Thu, 18 Dec 2014 10:29:48 +0000 (11:29 +0100)]
libdm: report: also check whether field type is supported for field-specific reserved value

We only checked global per-report-type reserved values for compatibility
with selection code. This patch also adds a check for per-report-field
reserved values. This avoids problems where unsupported report type is
used as reserved value which could cause hard to debug problems
otherwise. So this additional check stops from registering unsupported
and unhandled per-field reserved values.

Registerting such unsupported reserved value is a programmatic error,
so report internal error in this case to stop us from making a mistake
here in the future or even today where STR_LIST fields can't have
reserved values yet.

9 years agoWHATS_NEW: previous commit
Peter Rajnoha [Wed, 17 Dec 2014 14:06:48 +0000 (15:06 +0100)]
WHATS_NEW: previous commit

9 years agoreport: Add cache_policy and cache_settings (LV) segment fields.
Petr Rockai [Mon, 15 Dec 2014 19:48:05 +0000 (20:48 +0100)]
report: Add cache_policy and cache_settings (LV) segment fields.

9 years agoman: put back the --binary reference in {pv,vg,lv}display man page
Peter Rajnoha [Thu, 11 Dec 2014 14:50:37 +0000 (15:50 +0100)]
man: put back the --binary reference in {pv,vg,lv}display man page

9 years agotools, man: --binary option is available with -C for {pv,vg,lv}display
Peter Rajnoha [Thu, 11 Dec 2014 14:16:04 +0000 (15:16 +0100)]
tools, man: --binary option is available with -C for {pv,vg,lv}display

The {pv,vg,lv}display *do* use reporting in case "-C|--columns" is used.
The man page was correct, the recognition for the --binary was missing
in the code though!

9 years agoman: remove reference to --binary in {pv,vg,lv}display man page
Peter Rajnoha [Thu, 11 Dec 2014 09:40:28 +0000 (10:40 +0100)]
man: remove reference to --binary in {pv,vg,lv}display man page

The {pv,vg,lv}display commands don't use reporting capabilites and
as such they can't use --binary. This got into the man pages by
mistake - the display commands do not recognize --binary option.

9 years agovgimportclone: also notify lvmetad about changes if it's used
Peter Rajnoha [Wed, 10 Dec 2014 12:43:54 +0000 (13:43 +0100)]
vgimportclone: also notify lvmetad about changes if it's used

All the LVM commands are run in mode without lvmetad use (since lvmetad
can't handle duplicates). When we're finished with vgimportclone, we
need to notify lvmetad about changes.

Before this patch (/dev/sda and /dev/sdb contains a copy VG called "vg"):
$ vgimportclone --basevgname vg_snap /dev/sdb
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  Physical volume "/tmp/snap.zcJ8LCmj/vgimport0" changed  1 physical volume changed / 0 physical volumes not changed
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: Activation disabled. No device-mapper interaction will be attempted.
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  Volume group "vg" successfully changed
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  Volume group "vg" successfully renamed to "vg_snap"
  Reading all physical volumes.  This may take a while...
  Found volume group "vg" using metadata type lvm2
  Found volume group "fedora" using metadata type lvm2

$ vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  fedora   1   2   0 wz--n-   9.50g      0
  vg       1   1   0 wz--n- 124.00m 120.00m

(...lvmetad doesn't see the new "vg_snap"!)

With this patch applied:
$ vgimportclone --basevgname vg_snap /dev/sdb
  ...
  WARNING: lvmetad is running but disabled. Restart lvmetad before enabling it!
  Volume group "vg" successfully renamed to "vg_snap"
Notifying lvmetad about changes since it was disabled temporarily.
  Reading all physical volumes.  This may take a while...
  Found volume group "vg_snap" using metadata type lvm2
  Found volume group "fedora" using metadata type lvm2
  Found volume group "vg" using metadata type lvm2

$ vgs
  VG      #PV #LV #SN Attr   VSize   VFree
  fedora    1   2   0 wz--n-   9.50g      0
  vg        1   1   0 wz--n- 124.00m 120.00m
  vg_snap   1   1   0 wz--n- 124.00m 120.00m

The "restart lvmetad before enabling it" message is a bit misleading
here - we should probably suppress this one, but we can't suppress
warning messages selectively at the moment and we don't want to lose
other warning/error messages printed...

9 years agovgimportclone: replace awk with dumpconfig to generate temporary lvm.conf for vgimpor...
Peter Rajnoha [Wed, 10 Dec 2014 12:25:23 +0000 (13:25 +0100)]
vgimportclone: replace awk with dumpconfig to generate temporary lvm.conf for vgimportclone

With current dumpconfig, we can generate lvm.conf easily - we can merge
current lvm.conf with the config given on cmd line:
  lvm dumpconfig --mergedconfig --config "..."

This is a bit simpler than using awk and it also avoids problems when some of
the configuration is missing in existing lvm.conf file and hardcoded defaults
are used instead. The dumpconfig handles this transparently.

9 years agoWHATS_NEW: f94f846 actually fixes DM issue, not LVM issue
Peter Rajnoha [Tue, 9 Dec 2014 09:52:07 +0000 (10:52 +0100)]
WHATS_NEW: f94f846 actually fixes DM issue, not LVM issue

9 years agolibdm: report: fix incorrect memory use while using --select with --unbuffered for...
Peter Rajnoha [Tue, 9 Dec 2014 09:36:27 +0000 (10:36 +0100)]
libdm: report: fix incorrect memory use while using --select with --unbuffered for reporting

Under certain circumstances, the selection code can segfault:

$ vgs --select 'pv_name=~/dev/sda' --unbuffered vg0
  VG   #PV #LV #SN Attr   VSize   VFree
  vg0    6   3   0 wz--n- 744.00m 588.00m
Segmentation fault (core dumped)

The problem here is the use of --ubuffered together with regex used in
selection criteria. If the report output is not buffered, each row is
discarded as soon as it is reported. The bug is in the use of report
handle's memory - in the example above, what happens is:

  1) report handle is initialized together with its memory pool

  2) selection tree is initialized from selection criteria string
     (using the report handle's memory pool!)

    2a) this also means the regex is initialized from report handle's mem pool

  3) the object (row) is reported

    3a) any memory needed for output is intialized out of report handle's mem pool
    3b) selection criteria matching is executed - if the regex is checked the
        very first time (for the very first row reported), some more memory
        allocation happens as regex allocates internal structures "on-demand",
        it's allocating from report handle's mem pool (see also step 2a)

  4) the report output is executed

  5) the object (row) is discarded, meaning discarding all the mem pool
     memory used since step 3.

Now, with step 5) we have discarded the regex internal structures from step 3b.
When we execute reporting for another object (row), we're using the same
selection criteria (step 3b), but tihs is second time we're using the regex
and as such, it's already initialized completely. But the regex is missing the
internal structures now as they got discarded in step 5) from previous
object (row) reporting (because we're using "unbuffered" reporting).

To resolve this issue and to prevent any similar future issues where each
object/row memory is discarded after output (the unbuffered reporting) while
selection tree is global for all the object/rows, use separate memory pool
for report's selection.

This patch replaces "struct selection_node *selection_root" in struct
dm_report with new struct selection which contains both "selection_root"
and "mem" for separate mem pool used for selection.

We can change struct dm_report this way as it is not exposed via libdevmapper.

(This patch will have even more meaning for upcoming patches where selection
is used even for non-reporting commands where "internal" reporting and
selection criteria matching happens and where the internal reporting is
not buffered.)

9 years agoconfigure: fix automatic use of configure --enable-udev-systemd-background-jobs
Peter Rajnoha [Mon, 8 Dec 2014 09:51:33 +0000 (10:51 +0100)]
configure: fix automatic use of configure --enable-udev-systemd-background-jobs

Fix incorrect test in configure which sets --enable-udev-systemd-background-jobs
automatically if proper systemd version is available.

The UDEV_SYSTEMD_BACKGROUND_JOBS variable was not properly set to "yes" in
case systemd is available and we had "maybe" for this variable before.

9 years agolibdm: report: return immediately from dm_report_compact_fields without error if...
Peter Rajnoha [Fri, 5 Dec 2014 14:10:50 +0000 (15:10 +0100)]
libdm: report: return immediately from dm_report_compact_fields without error if there are no rows

Let's make dm_report_compact_fields consistent with dm_report_output fn
which also returns with success immediately if there are no rows.

9 years agolibdm: report: compact output applicable only if report is buffered
Peter Rajnoha [Fri, 5 Dec 2014 13:18:32 +0000 (14:18 +0100)]
libdm: report: compact output applicable only if report is buffered

9 years agoraid: properly rename split image
Zdenek Kabelac [Thu, 4 Dec 2014 13:24:44 +0000 (14:24 +0100)]
raid: properly rename split image

When we split leg from raid - we take a proper new lock for a new LV.
However for now activation checks only 'existince' of device UUID,
but it's not validating device has a proper name.

As a quick fix call suspend()/resume() to rename after split mirror.

9 years agoconfig: add report/compact_output lvm.conf setting to enable or isable field compacting
Peter Rajnoha [Fri, 5 Dec 2014 10:46:26 +0000 (11:46 +0100)]
config: add report/compact_output lvm.conf setting to enable or isable field compacting

$ lvm dumpconfig report/compact_output
compact_output=0

$ lvs vg
  LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvol0 vg   owi-a-s--- 4.00m
  lvol1 vg   -wi-a----- 4.00m
  lvol2 vg   swi-a-s--- 4.00m      lvol0  0.00

$ lvm dumpconfig report/compact_output
compact_output=1

$ lvs vg
  LV    VG   Attr       LSize Origin Data%
  lvol0 vg   owi-a-s--- 4.00m
  lvol1 vg   -wi-a----- 4.00m
  lvol2 vg   swi-a-s--- 4.00m lvol0  0.00

9 years agolibdm: report: add dm_report_compact_fields
Peter Rajnoha [Fri, 5 Dec 2014 10:42:43 +0000 (11:42 +0100)]
libdm: report: add dm_report_compact_fields

Add new dm_report_compact_fields function to cause report outout
(dm_report_output) to ignore fields which don't have any value set
in any of the rows reported. This provides support for compact report
output where only fields which have something to report are displayed.

9 years agolibdm: remove unimplemented dm_report_set_output_selection fn
Peter Rajnoha [Fri, 5 Dec 2014 10:38:51 +0000 (11:38 +0100)]
libdm: remove unimplemented dm_report_set_output_selection fn

The dm_report_set_output_selection was not implemented in the end -
we have dm_report_init_with_selection instead. This is just a remnant
from development code that got into libdevmapper.h by mistake.

9 years agopool: fix typo in error message: then -> than
Peter Rajnoha [Thu, 4 Dec 2014 08:17:48 +0000 (09:17 +0100)]
pool: fix typo in error message: then -> than

9 years agomirror: Validate raid region size config setting.
Alasdair G Kergon [Wed, 3 Dec 2014 22:47:08 +0000 (22:47 +0000)]
mirror: Validate raid region size config setting.

If necessary, round down to a power of 2 the raid/mirror region size
taken from the config files.

9 years agomirror: Restrict region size to power of 2.
Alasdair G Kergon [Tue, 2 Dec 2014 14:24:21 +0000 (14:24 +0000)]
mirror: Restrict region size to power of 2.

9 years agopost-release
Alasdair G Kergon [Fri, 28 Nov 2014 23:07:31 +0000 (23:07 +0000)]
post-release

9 years agopre-release v2_02_114
Alasdair G Kergon [Fri, 28 Nov 2014 23:06:07 +0000 (23:06 +0000)]
pre-release

9 years agolibdaemon: Fix some client leaks.
Alasdair G Kergon [Fri, 28 Nov 2014 21:31:51 +0000 (21:31 +0000)]
libdaemon: Fix some client leaks.

Free (and clear) h.protocol string on daemon_open() error paths
so it's OK for caller to skip calling daemon_close() if returned
h.socket_fd is -1.

Close h.socket_fd in daemon_close() to avoid possible leak.

https://bugzilla.redhat.com/1164234

9 years agoUpdate WHATS_NEW.
Petr Rockai [Thu, 27 Nov 2014 19:23:57 +0000 (20:23 +0100)]
Update WHATS_NEW.

9 years agolvcreate: Implement --cachepolicy/--cachesettings.
Petr Rockai [Thu, 27 Nov 2014 19:21:41 +0000 (20:21 +0100)]
lvcreate: Implement --cachepolicy/--cachesettings.

9 years agometadata: Add cache_policy to lvcreate_params and honour it.
Petr Rockai [Thu, 27 Nov 2014 19:20:48 +0000 (20:20 +0100)]
metadata: Add cache_policy to lvcreate_params and honour it.

9 years agotoollib: Fix uninitialised config value type in get_cachepolicy_params.
Petr Rockai [Thu, 27 Nov 2014 19:19:28 +0000 (20:19 +0100)]
toollib: Fix uninitialised config value type in get_cachepolicy_params.

9 years agotoollib: fix regression in parsing /dev/mapper/vg-lv
Zdenek Kabelac [Wed, 26 Nov 2014 16:09:47 +0000 (17:09 +0100)]
toollib: fix regression in parsing /dev/mapper/vg-lv

Commit b0dde9e8f026ddd679 introduced regression in parsing
/dev/mapper prefix - and tried to check for '/' one char behind.

9 years agocoverity: remove dead code in lv_info_with_seg_status (continued)
Peter Rajnoha [Wed, 26 Nov 2014 10:58:25 +0000 (11:58 +0100)]
coverity: remove dead code in lv_info_with_seg_status (continued)

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