summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* pvcreate, vgcreate, vgextend: restructuring to use toollibdev-dct-pvcreate-14David Teigland2016-01-2122-323/+1291
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Pull out the hidden equivalent of process_each_pv into an actual top level process_each_pv. - Pull the prompts to the top level, and do not run any prompts while locks are held. The orphan lock is reacquired after any prompts are done, and the devices being created are checked for any change made while the lock was not held. Previously, pvcreate_vol() was the shared function for creating a PV for pvcreate, vgcreate, vgextend. Now, it will be toollib function pvcreate_each_device(). pvcreate_vol() was called effectively as a helper, from within vgcreate and vgextend code paths. pvcreate_each_device() will be called at the same level as other process_each functions. One of the main problems with pvcreate_vol() is that it included a hidden equivalent of process_each_pv for each device being created: pvcreate_vol() -> _pvcreate_check() -> find_pv_by_name() -> get_pvs() -> get_pvs_internal() -> _get_pvs() -> get_vgids() -> /* equivalent to process_each_pv */ dm_list_iterate_items(vgids) vg = vg_read_internal() dm_list_iterate_items(&vg->pvs) pvcreate_each_device() reorganizes the code so that each-VG-each-PV loop is done once, and uses the standard process_each_pv function at the top level of the function.
* man: mention GPT id for LVM in pvcreate man pagePeter Rajnoha2016-01-191-1/+2
|
* report: fix off-by-one error when reporting LV segment's metadata device ↵Peter Rajnoha2016-01-191-1/+1
| | | | | | | extent count Commit a3f484f812bfb89063fbc25e378f34cacd50bf7d used "-1" two times by mistake for the extent count when reporting seg_metadata_le_ranges.
* report: add note about seg_pe_ranges and seg_le_ranges in -o helpPeter Rajnoha2016-01-191-1/+1
|
* report: add seg_le_ranges report fieldPeter Rajnoha2016-01-196-0/+34
|
* report: make devices, metadata_devices, seg_pe_ranges and ↵Peter Rajnoha2016-01-194-11/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | seg_metadata_le_ranges fields consistent There are two basic groups of fields for LV segment device reporting: - related to LV segment's devices: devices and seg_pe_ranges - related to LV segment's metadata devices: metadata_devices and seg_metadata_le_ranges The devices and metadata_devices report devices in this format: "device_name(extent_start)" The seg_pe_ranges and seg_metadata_le_ranges report devices in this format: "device_name:extent_start-extent_end" This patch reverts partly what commit 7f74a995029caa41ee3cf9aec0bd024a34bfd89a (v 2.02.140) introduced in this area - it added [] for hidden devices to mark them for all four fields mentioned above. We won't be marking hidden devices in devices and metadata_devices fields. The seg_metadata_le_ranges field will have hidden devices marked - it's new enough that we don't need to care about compatibility much yet. The seg_pe_ranges is old enough that we shouldn't be changing this one - so we're reverting to not marking hidden devices here. Instead, there's going to be a new field "seg_le_ranges" which is going to replace the seg_pe_ranges and it will mark hidden devices - this is going to be introduced in a patch later. So in the end we'll end up with: (LV segment's devices) devices field with "device_name(extent_start)" format, not marking hidden devices seg_pe_ranges field with "device_name:extent_start-extent_end" format, not marking hidden devices (deprecated, new seg_le_ranges should be used instead for standardized format) seg_le_ranges field with "device_name:extent_start-extent_end" format, marking hidden devices (LV segment's metadata devices) metadata_devices field with "device_name:extent_start-extent_end" format, not marking hidden devices seg_metadata_le_ranges field with "device_name:extent_start-extent_end" format, marking hidden devices Also, both seg_le_ranges and seg_metadata_le_ranges will honour the report/list_item_separator setting which can be used to configure the delimiter used for list items. So, to sum it up, we will recommend using the new seg_le_ranges and seg_metadata_le_ranges fields because they display devices with standard extent range format, they can mark hidden devices and they honour the report/list_item_separator setting. We'll be keeping devices,seg_pe_ranges and metadata_devices fields for compatibility.
* report: change _format_pvsegs to return list instead of plain string, change ↵Peter Rajnoha2016-01-195-89/+132
| | | | | | | | | | | | | | associated report fields from STR to STR_LIST The associated devices,metadata_devices,seg_pe_ranges and seg_metadata_le_ranges are reported as genuine string lists now. This allows for using the items separately in -S|--select (so searching for subsets etc.) and also it allows for configuring the separator using report/list_item_separator which may be useful in scripts (however, we'll enable this only for seg_le_metadata_ranges and not for devices,seg_pe_ranges and seg_metadata_devices for compatibility reasons - see following patch).
* refactor: add 'delimiter' variable for non-default delimiter when reporting ↵Peter Rajnoha2016-01-191-14/+15
| | | | string list
* lvconvert: disallow test mode in shared VGDavid Teigland2016-01-181-0/+7
| | | | | | until test mode can be checked in all the necessary locations related to lvmlockd to prevent making actual changes.
* toollib: add comment about missing deviceDavid Teigland2016-01-181-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add a comment in _process_pvs_in_vg() to document the place where there have been problems with processing PVs twice. For a while we had a hacky workaround here where we'd skip processing a PV if its device wasn't found in all_devices (and !is_missing_pv since we want to process PVs with missing devices.). That workaround was removed in commit 5cd4d46f because it was no longer needed. The workaround had originally been needed to prevent a device from being processed twice when the PV had no MDAs -- it would be processed once in its real VG and then the workaround would prevent it from being processed a second time in the orphan VG. Wrongly appearing as an orphan likely happened because lvmcache would consider the no-MDA PV an orphan unless the real VG holding that PV was also in lvmcache. This issue is also mentioned in pvchange where holding the global lock allows VGs to remain in lvmcache so PVs with 0 mdas are not considered orphans. The workaround in _process_pvs_in_vg() was originally intended for reporting commands, not for pvchange. But, it was accidentally helping pvchange also because the method described by the pvchange global lock comment had been subverted by commit 80f4b4b8. Commit 80f4b4b8 was found to be unnecessary, and was reverted in commit e710bac0. This restored the intended global lock lvmcache effect to pvchange, and it no longer relied on the workaround in toollib.
* report: Fix seg_pe_ranges LV sizes.Alasdair G Kergon2016-01-182-1/+6
| | | | | | When reporting on LVs, take the end of the range from the size of the underlying (hidden) LV rather than the logical size of the current segment (that PVs use).
* pvmove: use toollibDavid Teigland2016-01-182-124/+110
| | | | | | | | | | | | | | | | | | | | | | | | | | Previously, pvmove used the function find_pv_in_vg() which did the equivalent of process_each_pv() by doing: find_pv_by_name() -> get_pvs() -> get_pvs_internal() -> _get_pvs() -> get_vgids() -> /* equivalent to process_each_pv */ dm_list_iterate_items(vgids) vg = vg_read_internal() dm_list_iterate_items(&vg->pvs) With the found 'pv', it would do vg_read() on pv_vg_name(pv), and then do the actual pvmove processing. This commit simplifies by using process_each_pv() and putting the actual pvmove processing into the "single" function. This eliminates both find_pv_by_name() and the vg_read(). The processing code that followed vg_read remains the same. The return code for the pvmove command is not based on the process_each_pv return code, but is based on the success/fail conditions in the existing code.
* Revert "Revert "process_each_pv: remove unnecessary workaround""David Teigland2016-01-181-16/+1
| | | | | | This reverts commit 6d09c8c2c45ea1dea243134b8badc841a87cc979. Try again to remove the workaround.
* lvmlockd: cosemtic improvements to loggingDavid Teigland2016-01-183-25/+29
| | | | | Also pass our name to sanlock so it appears in the sanlock status output.
* lvmlockd: fix lvb validation for conversionDavid Teigland2016-01-181-0/+4
| | | | | | | Make the lvb validation rules for convert match those for unlock (even though it would be very unlikely or impossible for convert to deal with zero lvb.)
* pvchange, pvresize: fix lockd_gl() usageDavid Teigland2016-01-182-4/+10
| | | | | | | | When an orphan PV is changed/resized, the lvmlockd global lock is converted from sh to ex. If the command is changing two orphan PVs, the conversion to ex should be done only once.
* report: add kernel_cache_settings fieldPeter Rajnoha2016-01-184-0/+72
| | | | | | | | | | | | | | | | | | | Existing cache_settings field displays the settings which are saved in metadata. Add new kernel_cache_settings fields to display the settings which are currently used by kernel, including fields for which default values are used. This way users have complete view of the set of cache settings supported (and which they can set) and their values which are used at the moment by kernel. For example: $ lvs -o name,cache_policy,cache_settings,kernel_cache_settings vg LV Cache Policy Cache Settings KCache Settings cached1 mq migration_threshold=1024,write_promote_adjustment=2 migration_threshold=1024,random_threshold=4,sequential_threshold=512,discard_promote_adjustment=1,read_promote_adjustment=4,write_promote_adjustment=2 cached2 smq migration_threshold=1024 migration_threshold=1024 cached3 smq migration_threshold=2048
* post-releaseAlasdair G Kergon2016-01-164-2/+8
|
* pre-releasev2_02_140Alasdair G Kergon2016-01-164-7/+4
|
* lvm2app: fix lvm2app to return either 0 or 1 for lvm_vg_is_{clustered,exported}Peter Rajnoha2016-01-152-4/+5
| | | | | | | Fix lvm2app to return either 0 or 1 for lvm_vg_is_{clustered,exported}, including internal functions pvseg_is_allocated and vg_is_resizeable which are not yet exposed in lvm2app but make them consistent with the rest.
* lvmlockd: fixes for test modeDavid Teigland2016-01-143-14/+66
| | | | | Get the test mode working (lvmlockd running with no lock manager).
* Revert "lvmcache: skip drop when vg_write lock is not held"David Teigland2016-01-141-1/+1
| | | | | | | | | | | | | | | | This reverts e28e22b9e1e4f7243608aa24ddf43ec63afd1751 The problem that that commit was fixing (pytest failure) no longer appears with the current code, so the commit is not needed. That commit is a problem for pvchange, because it prevents lvmcache from retaining VG metadata even while the global lock is held. pvchange holds the global lock to ensure that VG metadata is kept in lvmcache throughout processing. If the cache is not kept, a PV with zero MDAs will appear first in its actual VG and then appear again in the orphan VG. It wrongly appears a second time in the orphan VG only if the actual VG is dropped from lvmcache.
* report: add kernel_discards report field to display thin pool discard used ↵Peter Rajnoha2016-01-148-0/+90
| | | | | | | | in kernel Thin pool discard mode set in metadata can be different from the one actually used if any device underneath does not support that mode. Add kernel_discard report field to make it possible to see this difference.
* Revert "process_each_pv: remove unnecessary workaround"David Teigland2016-01-141-1/+16
| | | | This reverts commit be1b1f3d8941543bcde2f42e65ed0f22fd07b122.
* lvmanip: fix last commit and drop elseZdenek Kabelac2016-01-141-1/+2
| | | | | In last commit when removing if() branch this 'else' now has to be dropped.
* cleanup: order ac membersZdenek Kabelac2016-01-141-6/+5
|
* cleanup: spacesZdenek Kabelac2016-01-141-23/+23
|
* cleanup: replace log_warnZdenek Kabelac2016-01-141-2/+2
|
* cleanup: explicit prohibition for virtual segsZdenek Kabelac2016-01-141-9/+6
| | | | | | | Internal _alloc_init() is only called from allocate_extents(), which already does prevent usage of virtual segments. So mark as internal error early and do not process it any further.
* cleanup: simplier formulaZdenek Kabelac2016-01-141-14/+7
|
* cleanup: more readable checkZdenek Kabelac2016-01-141-12/+9
|
* snapshot: relocate alloc_snapshot_segZdenek Kabelac2016-01-143-30/+23
| | | | Move alloc_snapshot_seg to snapshot_manip and make it local static.
* segtype: check for activationZdenek Kabelac2016-01-1410-39/+64
| | | | | Before setting static variable with check passed state, detect if we are allowed to talk to driver.
* lvresize: check for poolmetadatasize arg earlierZdenek Kabelac2016-01-142-9/+11
| | | | | Since we check for poolmetadatasize, we need to detect it before actual test.
* lvmanip: add lv_is_snapshotZdenek Kabelac2016-01-143-18/+8
| | | | | | | Add new test for lv_is_snapshot(). Also move few other bitchecks into same place as remaining bit tests. TODO: drop lv_is_merging_origin() and keep using lv_is_merging().
* vgcfgrestore: Retain allocatable PV attribute.Alasdair G Kergon2016-01-144-9/+6
| | | | | | | pvchange -xn was getting lost. All PVs were set to allocatable again after restore. Moved setting ALLOCATABLE_PV outside pv_setup().
* vgchange: fix lockd_gl resultsDavid Teigland2016-01-131-15/+20
| | | | | | | The wrong error value was being checked from lockd_gl() in two cases. Clarify the use of lockd_gl() in the lock-start case.
* lvmlockd: fix exit codeDavid Teigland2016-01-131-1/+1
| | | | libdaemon uses 1 for success
* process_each_pv: remove unnecessary workaroundDavid Teigland2016-01-131-16/+1
| | | | | | | The problem addressed by this workaround no longer seems to exist, so remove it. PVs with no mdas no longer appear in both their actual VG and in the orphan VG.
* lv: fix check for NULL origin_lv in _do_lv_origin_dup, cleanup ↵Peter Rajnoha2016-01-131-8/+7
| | | | _do_lvconvert_lv_dup
* cleanup: rename 'invisible devices' to 'hidden devices'Peter Rajnoha2016-01-131-1/+1
|
* conf: fix 'the volume list' vs 'volume list' and '@*'Peter Rajnoha2016-01-132-12/+12
|
* cleanup: rename 'invisible devices' to 'hidden devices'Peter Rajnoha2016-01-131-1/+1
|
* cleanup: rename 'invisible devices' to 'hidden devices'Peter Rajnoha2016-01-138-19/+19
|
* WHATS_NEW: reports and invisible devicesPeter Rajnoha2016-01-131-1/+2
|
* test: add report-invisible.sh testPeter Rajnoha2016-01-131-0/+39
|
* tests: update tests to deal with invisible devices consistentlyPeter Rajnoha2016-01-135-26/+27
|
* cleanup: cleanup lv.h and put fns into categories for better readabilityPeter Rajnoha2016-01-131-36/+43
|
* conf: update command_profile_template.profile.inPeter Rajnoha2016-01-131-0/+10
|
* conf: regeneratePeter Rajnoha2016-01-131-11/+16
|