]> sourceware.org Git - lvm2.git/log
lvm2.git
13 years agoMove common libudev code to lvm-wrappers.[ch].
Peter Rajnoha [Fri, 22 Apr 2011 11:59:59 +0000 (11:59 +0000)]
Move common libudev code to lvm-wrappers.[ch].

...so we can use it throughout.

13 years agoRequire libudev >= 143 when compiling with udev support.
Peter Rajnoha [Fri, 22 Apr 2011 11:56:41 +0000 (11:56 +0000)]
Require libudev >= 143 when compiling with udev support.

Old versions of libudev < 143 were experimental and unstable. Require recent
and stable versions only (version 143 is old enough anyway).

13 years agoDisable nightly test for vgimportclone until proper fix is made.
Dave Wysochanski [Thu, 21 Apr 2011 19:06:00 +0000 (19:06 +0000)]
Disable nightly test for vgimportclone until proper fix is made.

This fails on lenny buildslave for some reason.
For now disable the vgimportclone part of the test until proper fix.

Let the first part of the test still run though, which shows pvs working
with duplicate pvs.

13 years agoAdd vgimportclone symlink for nightly test.
Dave Wysochanski [Thu, 21 Apr 2011 17:42:58 +0000 (17:42 +0000)]
Add vgimportclone symlink for nightly test.

13 years agoAdd nightly test for vgimportclone and querying of vgnames with duplicate pvs.
Dave Wysochanski [Thu, 21 Apr 2011 17:03:38 +0000 (17:03 +0000)]
Add nightly test for vgimportclone and querying of vgnames with duplicate pvs.

Related to rhbz 697959.

This test fails prior to these two commits:
commit af112eb2c9a62c5d794df920218bd3ee291d5b25
Author: Zdenek Kabelac <zkabelac@redhat.com>
Date:   Thu Apr 21 13:15:26 2011 +0000

    Skip check for NULL before dm_free

    dm_free makes this test itself.

commit 91419c3e86bf9666aab2aa631faae1ba73e8d745
Author: Zdenek Kabelac <zkabelac@redhat.com>
Date:   Thu Apr 21 13:13:40 2011 +0000

    Fix use of released vgname and vgid

13 years agoSkip check for NULL before dm_free
Zdenek Kabelac [Thu, 21 Apr 2011 13:15:26 +0000 (13:15 +0000)]
Skip check for NULL before dm_free

dm_free makes this test itself.

13 years agoFix use of released vgname and vgid
Zdenek Kabelac [Thu, 21 Apr 2011 13:13:40 +0000 (13:13 +0000)]
Fix use of released vgname and vgid

Avoid using of already released memory when duplicated MDA is found.

As get_pv_from_vg_by_id() may call lvmcache_label_scan() use the local copy
of the vgname and vgid on the stack as vginfo may dissapear and code was
then accessing garbage in memory.

i.e.  pvs  /dev/loop0
(when /dev/loop0 and /dev/loop1 has same MDA content)

Invalid read of size 1
   at 0x523C986: dm_hash_lookup (hash.c:325)
   by 0x440C8C: vginfo_from_vgname (lvmcache.c:399)
   by 0x4605C0: _create_vg_text_instance (format-text.c:1882)
   by 0x46140D: _text_create_text_instance (format-text.c:2243)
   by 0x47EB49: _vg_read (metadata.c:2887)
   by 0x47FBD8: vg_read_internal (metadata.c:3231)
   by 0x477594: get_pv_from_vg_by_id (metadata.c:344)
   by 0x45F07A: _get_pv_if_in_vg (format-text.c:1400)
   by 0x45F0B9: _populate_pv_fields (format-text.c:1414)
   by 0x45F40F: _text_pv_read (format-text.c:1493)
   by 0x480431: _pv_read (metadata.c:3500)
   by 0x4802B2: pv_read (metadata.c:3462)
 Address 0x652ab80 is 0 bytes inside a block of size 4 free'd
   at 0x4C2756E: free (vg_replace_malloc.c:366)
   by 0x442277: _free_vginfo (lvmcache.c:963)
   by 0x44235E: _drop_vginfo (lvmcache.c:992)
   by 0x442B23: _lvmcache_update_vgname (lvmcache.c:1165)
   by 0x443449: lvmcache_update_vgname_and_id (lvmcache.c:1358)
   by 0x443C07: lvmcache_add (lvmcache.c:1492)
   by 0x46588C: _text_read (text_label.c:271)
   by 0x466A65: label_read (label.c:289)
   by 0x4413FC: lvmcache_label_scan (lvmcache.c:635)
   by 0x4605AD: _create_vg_text_instance (format-text.c:1881)
   by 0x46140D: _text_create_text_instance (format-text.c:2243)
   by 0x47EB49: _vg_read (metadata.c:2887)

Add testing script

13 years agoAlways copy all tests to builddir regardless of T/S, since subsequent runs
Petr Rockai [Tue, 19 Apr 2011 15:28:17 +0000 (15:28 +0000)]
Always copy all tests to builddir regardless of T/S, since subsequent runs
(possibly with different T or S) skip that step.

13 years agoImprove the discard documentation. Also improve discard code in
Mike Snitzer [Wed, 13 Apr 2011 18:26:39 +0000 (18:26 +0000)]
Improve the discard documentation.  Also improve discard code in
pv_manip.c to properly account for case when pe_start=0 and the first
physical extent is to be released (currently skip the first extent to
avoid discarding the PV label).

13 years agoUse uint32_t rather than uint64_t.
Mike Snitzer [Tue, 12 Apr 2011 22:04:04 +0000 (22:04 +0000)]
Use uint32_t rather than uint64_t.

13 years agoAdd "devices/issue_discards" to lvm.conf.
Mike Snitzer [Tue, 12 Apr 2011 21:59:01 +0000 (21:59 +0000)]
Add "devices/issue_discards" to lvm.conf.
Issue discards on lvremove if enabled and both storage and kernel have support.

13 years agofix s/then/than/ typo in lvm.conf.5.in
Mike Snitzer [Tue, 12 Apr 2011 21:21:08 +0000 (21:21 +0000)]
fix s/then/than/ typo in lvm.conf.5.in

13 years agofix s/then/than/ typos in 'pv_min_size' section and fold floppy example
Mike Snitzer [Tue, 12 Apr 2011 20:44:41 +0000 (20:44 +0000)]
fix s/then/than/ typos in 'pv_min_size' section and fold floppy example
into documentation preamble.

13 years agoReplace dm_snprintf with strncpy
Zdenek Kabelac [Tue, 12 Apr 2011 14:13:17 +0000 (14:13 +0000)]
Replace dm_snprintf with strncpy

My previous patch fixed incorrect error check for dm_snprintf.
However in this particular case - dm_snprintf has been used differently -
just like strncpy + setting last char with '\0' - so the code had to return
error - because the buffer was to short for whole string.

Patch replaces it with real strncpy.
Also test for alloca() failure is removed - as the program behaviour
is rather undefined in this case - it never returns NULL.

13 years agoMake the mirror log checks in t-lvconvert-repair-policy a bit more strict
Petr Rockai [Tue, 12 Apr 2011 12:39:24 +0000 (12:39 +0000)]
Make the mirror log checks in t-lvconvert-repair-policy a bit more strict
(i.e. accurate).

13 years agoThis patchset refactors some reporting code and completes the remaining
Petr Rockai [Tue, 12 Apr 2011 12:24:29 +0000 (12:24 +0000)]
This patchset refactors some reporting code and completes the remaining
lvseg properties for lvm2app, 'devices' and 'seg_pe_ranges'.

Signed-off-by: Dave Wysochanski <dwysocha@redhat.com>
Reviewed-by: Petr Rockai <prockai@redhat.com>
13 years agoFix incorrect tests for dm_snprintf() failure
Zdenek Kabelac [Sat, 9 Apr 2011 19:05:23 +0000 (19:05 +0000)]
Fix incorrect tests for dm_snprintf() failure

As the memory is preallocated based on arg size in these cases,
the error would be quite hard to trigger here anyway.

13 years agoFix some unmatching sign comparation gcc warnings
Zdenek Kabelac [Fri, 8 Apr 2011 14:40:18 +0000 (14:40 +0000)]
Fix some unmatching sign comparation gcc warnings

Simple replacement for unsigned type - usually in for() loops.

13 years agoAdd missing printf attributes
Zdenek Kabelac [Fri, 8 Apr 2011 14:21:34 +0000 (14:21 +0000)]
Add missing printf attributes

These attributes were missing in previous patch, that was adding
instrumentation for printf formating string parameter.

13 years agoUse dm_snprintf
Zdenek Kabelac [Fri, 8 Apr 2011 14:18:40 +0000 (14:18 +0000)]
Use dm_snprintf

and fix differently signed comparation.

13 years agoBetter const cast logic
Zdenek Kabelac [Fri, 8 Apr 2011 14:14:57 +0000 (14:14 +0000)]
Better const cast logic

(although still gcc gives const violation warning)

13 years agoFix some forgotten -Wold-style-definition gcc warnings
Zdenek Kabelac [Fri, 8 Apr 2011 14:13:08 +0000 (14:13 +0000)]
Fix some forgotten -Wold-style-definition gcc warnings

13 years agoNewer gcc doesn't need this trick
Zdenek Kabelac [Fri, 8 Apr 2011 14:11:40 +0000 (14:11 +0000)]
Newer gcc doesn't need this trick

In fact it now generates an opposite warning about using undefined variable.

13 years agoThanks to Zdenek Kabelac (kabi) for pointing out that I was using
Jonathan Earl Brassow [Thu, 7 Apr 2011 21:49:29 +0000 (21:49 +0000)]
Thanks to Zdenek Kabelac (kabi) for pointing out that I was using
dm_pool_free incorrectly.  This check-in fixes that incorrect usage.

I've also added a WHATS_NEW line to reflect the changes I made to allow
lv_extend to operate on 0 length intrinsically layered LVs (i.e mirrors
and RAID).  I forgot that in the last commit.

13 years agoThis patch adds the ability to extend 0 length layered LVs. This
Jonathan Earl Brassow [Wed, 6 Apr 2011 21:32:20 +0000 (21:32 +0000)]
This patch adds the ability to extend 0 length layered LVs.  This
allows us to allocate all images of a mirror (or RAID array) at one
time during create.

The current mirror implementation still requires a separate allocation
for the log, however.

13 years agoAdd rudimentary versioning to the dmevend protocol, allowing us to detect the
Petr Rockai [Mon, 4 Apr 2011 16:11:09 +0000 (16:11 +0000)]
Add rudimentary versioning to the dmevend protocol, allowing us to detect the
(protocol) version of the running dmeventd on the client side.

Right now this is only used in dmeventd -R.

13 years agoCleanup fid finalization code in free_vg and allow exactly the same fid to be set...
Peter Rajnoha [Fri, 1 Apr 2011 14:54:20 +0000 (14:54 +0000)]
Cleanup fid finalization code in free_vg and allow exactly the same fid to be set again for a PV/VG.

Actually, we can call vg_set_fid(vg, NULL) instead of calling
destroy_instance for all PV structs and a VG struct - it's the same
code we already have in the vg_set_fid.

Also, allow exactly the same fid to be set again for the same PV/VG
Before, this could end up with the fid destroyed because we destroyed
existing fid first and then we used the new one and we didn't care
whether existing one == new one by chance.

13 years agoFinalize PV format instances properly in lvm_vg_write fn.
Peter Rajnoha [Fri, 1 Apr 2011 13:44:51 +0000 (13:44 +0000)]
Finalize PV format instances properly in lvm_vg_write fn.

lvm_vg_write fn reinitializes the vg->removed_pvs list. We have to finalize
all PV format instances attached to PVs found in the original list.

13 years agoFix free_vg order
Zdenek Kabelac [Wed, 30 Mar 2011 14:35:00 +0000 (14:35 +0000)]
Fix free_vg order

As now the FID management is more complex, the code inside free_vg needs
to access some parts of memory pools which were not needed before.

For this - makes the order of unlock_and_free_vg() unconditional.
Keek using unlock_and_free_vg() API function.

For properly working VG locking mechanism only the alphabeting locking
orderer needs to be preserved.

TODO: there could be few more code parts simplified when we 'officially'
support of referencies between different memory pools.

13 years agoTesting: remove -q from grep
Zdenek Kabelac [Wed, 30 Mar 2011 13:39:24 +0000 (13:39 +0000)]
Testing: remove -q from grep

to avoid any problems with pipe breaking.

13 years agoUse created hash tables for quick check of LV, PV.
Zdenek Kabelac [Wed, 30 Mar 2011 13:35:51 +0000 (13:35 +0000)]
Use created hash tables for quick check of LV, PV.

Instead of searching linear list of all LVs, PVs - use created hash tables
also for quick mapping between LV.

(Note - for small number of PVs or LVs the overhead of the hash is bigger).

TODO: Use hash tables in volume_group structure directly.

13 years agoKeep the cache content when the exported vg buffer is matching
Zdenek Kabelac [Wed, 30 Mar 2011 13:14:34 +0000 (13:14 +0000)]
Keep the cache content when the exported vg buffer is matching

Instead of regenerating config tree and parsing same data again,
check whether export_vg_to_buffer does not produce same string as
the one already cached - in this case keep it, otherwise throw cached
content away.

For the code simplicity calling _free_cached_vgmetadata() with
vgmetadata == NULL as the function handles this itself.

Note: sometimes export_vg_to_buffer() generates almost the same data
with just different time stamp, but for the patch simplicity,
data are reparsed in this case.

This patch currently helps for vgrefresh.

13 years agoFew more files filtered from memory locking
Zdenek Kabelac [Wed, 30 Mar 2011 13:06:13 +0000 (13:06 +0000)]
Few more files filtered from memory locking

Code located in these files should not be used in critical section.

13 years agoWord alignment for strings
Zdenek Kabelac [Wed, 30 Mar 2011 12:57:03 +0000 (12:57 +0000)]
Word alignment for strings

Align strdup char* allocation just on 2 bytes.
It looks like wasting space to align strings on 8 bytes.
(Could be even 1byte - but for hashing it might eventually get better
perfomance - but probably hardly measurable).

TODO: check on various architectures it's not making any problems.

13 years agoOptimise error message write to _lvm_errmsg
Zdenek Kabelac [Wed, 30 Mar 2011 12:53:04 +0000 (12:53 +0000)]
Optimise error message write to _lvm_errmsg

Isn't usually perfomance critical - but log_error is used i.e.for debuging,
this code noticable slows down the processing.

Added 512KB limit to avoid memory exhastions in case of some endless loop.

TODO: use _lvm_errmsg buffer only when lvm2api needs it.

13 years agoKeep noreturn attribute for lvm_thread_fn
Zdenek Kabelac [Wed, 30 Mar 2011 12:48:16 +0000 (12:48 +0000)]
Keep noreturn attribute for lvm_thread_fn

Even thought my gcc seems to not need it, as it's deduced from pthread_exit(),
keep it here for older compiler to avoid getting warnings.

13 years agoValgrind updates
Zdenek Kabelac [Wed, 30 Mar 2011 12:43:32 +0000 (12:43 +0000)]
Valgrind updates

Avoid locking sum testing with valgrind compilation.

Make memory unaccessible in the valgrind for dm_pool_abadon_object.

Valgrind hinting should not be needed in _free_chunk for dm_free.

13 years agoBetter shutdown for clvmd
Zdenek Kabelac [Wed, 30 Mar 2011 12:36:19 +0000 (12:36 +0000)]
Better shutdown for clvmd

'a small step' towards cleaner shutdown sequence.
Normally clvmd doens't care about unreleased memory on exit -
but for valgrind testing it's better to have them cleaned all.

So - few things are left on exit path - this patch starts to remove
just some of them.

1. lvm_thread_fs is made as a thread which could be joined on exit()
2. memory allocated to local_clien_head list is released.
   (this part is somewhat more complex if the proper reaction is
   needed - and as it requires some heavier code moving - it will
   be resolved later.

13 years agoFix reading of unitialized memory
Zdenek Kabelac [Wed, 30 Mar 2011 12:30:39 +0000 (12:30 +0000)]
Fix reading of unitialized memory

Could be reached via few of our lvm2 test cases:

==11501== Invalid read of size 8
==11501==    at 0x49B2E0: _area_length (import-extents.c:204)
==11501==    by 0x49B40C: _read_linear (import-extents.c:222)
==11501==    by 0x49B952: _build_segments (import-extents.c:323)
==11501==    by 0x49B9A0: _build_all_segments (import-extents.c:334)
==11501==    by 0x49BB4C: import_extents (import-extents.c:364)
==11501==    by 0x497655: _format1_vg_read (format1.c:217)
==11501==    by 0x47E43E: _vg_read (metadata.c:2901)

cut from t-vgcvgbackup-usage.sh
--
pvcreate -M1 $(cat DEVICES)
vgcreate -M1 -c n $vg $(cat DEVICES)
lvcreate -l1 -n $lv1 $vg $dev1
--

Idea of the fix is rather defensive - to allocate one extra element
to 'map' array which is then used in _area_length() - where the
loop checks, whether next map entry is continuous.

By placing there always one extra zero entry -
we fix the read of unallocated memory, and we make sure the data would
not make a continous block.

FIXME: there could be a problem if some special broken lvm1 data would be imported.
As the format1 is currently not really used - leave it for future fix
and use this small hotfix for now.

13 years agoSimplify pool debug initialization
Zdenek Kabelac [Wed, 30 Mar 2011 12:16:15 +0000 (12:16 +0000)]
Simplify pool debug initialization

zalloc pool structure and skip zeroing members.

13 years agoFix 2 signess warnings reported by gcc
Zdenek Kabelac [Wed, 30 Mar 2011 12:14:36 +0000 (12:14 +0000)]
Fix 2 signess warnings reported by gcc

Replace int with unsigned counter.
Replace snprintf with dm_snprintf.

13 years agoUse id_equal instead of strncmp()
Zdenek Kabelac [Tue, 29 Mar 2011 21:57:56 +0000 (21:57 +0000)]
Use id_equal instead of strncmp()

More consistent and easier to read.

13 years agoAdd attribute printf
Zdenek Kabelac [Tue, 29 Mar 2011 21:56:53 +0000 (21:56 +0000)]
Add attribute printf

13 years agoAdd attribute printf
Zdenek Kabelac [Tue, 29 Mar 2011 21:53:46 +0000 (21:53 +0000)]
Add attribute printf

gcc suggested to add these attributes to instrumentat
printf arguments. Adding it for internal functions as well.

13 years agoConst warning fixes
Zdenek Kabelac [Tue, 29 Mar 2011 21:49:18 +0000 (21:49 +0000)]
Const warning fixes

With recent update of dm_report_field_string() API call to accept
completely const objects - we no longer need loose constness here
and keep it forwarding.

13 years agoFix access to released memory
Zdenek Kabelac [Tue, 29 Mar 2011 21:34:18 +0000 (21:34 +0000)]
Fix access to released memory

Invalid primary_vginfo was supposed to move all its lvmcache_infos to
orphan_vginfo - however it has called _drop_vginfo() inside the loop
that released primary_vginfo itself - thus made the loop using released
memory.

Use _vginfo_detach_info() instead and call _drop_vginfo after
th loop is finished.

Valgrind trace it should fix:

Invalid read of size 8
   at 0x41E960: _lvmcache_update_vgname (lvmcache.c:1229)
   by 0x41EF86: lvmcache_update_vgname_and_id (lvmcache.c:1360)
   by 0x441393: _text_read (text_label.c:329)
   by 0x442221: label_read (label.c:289)
   by 0x41CF92: lvmcache_label_scan (lvmcache.c:635)
   by 0x45B303: _vg_read_by_vgid (metadata.c:3342)
   by 0x45B4A6: lv_from_lvid (metadata.c:3381)
   by 0x41B555: lv_activation_filter (activate.c:1346)
   by 0x415868: do_activate_lv (lvm-functions.c:343)
   by 0x415E8C: do_lock_lv (lvm-functions.c:532)
   by 0x40FD5F: do_command (clvmd-command.c:120)
   by 0x413D7B: process_local_command (clvmd.c:1686)
 Address 0x63eba10 is 16 bytes inside a block of size 160 free'd
   at 0x4C2756E: free (vg_replace_malloc.c:366)
   by 0x41DE70: _free_vginfo (lvmcache.c:980)
   by 0x41DEDA: _drop_vginfo (lvmcache.c:998)
   by 0x41E854: _lvmcache_update_vgname (lvmcache.c:1238)
   by 0x41EF86: lvmcache_update_vgname_and_id (lvmcache.c:1360)
   by 0x441393: _text_read (text_label.c:329)
   by 0x442221: label_read (label.c:289)
   by 0x41CF92: lvmcache_label_scan (lvmcache.c:635)
   by 0x45B303: _vg_read_by_vgid (metadata.c:3342)
   by 0x45B4A6: lv_from_lvid (metadata.c:3381)
   by 0x41B555: lv_activation_filter (activate.c:1346)
   by 0x415868: do_activate_lv (lvm-functions.c:343)

problematic line:
dm_list_iterate_items_safe(info2, info3, &primary_vginfo->infos)

13 years agoFix sending uninitilised bytes in cluster messages
Zdenek Kabelac [Tue, 29 Mar 2011 21:05:39 +0000 (21:05 +0000)]
Fix sending uninitilised bytes in cluster messages

Fix 2 more functions sending cluster messages to avoid passing uninitilised bytes
and compensate 1 extra byte attached to the message from the clvm_header.args[1]
member variable.

13 years agoFix -Wold-style-definition gcc warnings
Zdenek Kabelac [Tue, 29 Mar 2011 20:30:05 +0000 (20:30 +0000)]
Fix -Wold-style-definition gcc warnings

13 years agoRemove double braces
Zdenek Kabelac [Tue, 29 Mar 2011 20:19:03 +0000 (20:19 +0000)]
Remove double braces

Clang gives notice about possible confusion as commonly double bracces are
used when some assignment is done inside them.

13 years agogdbinit update
Jonathan Earl Brassow [Tue, 29 Mar 2011 12:53:13 +0000 (12:53 +0000)]
gdbinit update

When doing lv_status_r on a sub_lv, do not climb the tree up past the
starting point.

13 years agos/MIRROR_NOTSYNCED/LV_NOTSYNCED/ - Flag will may refer to more than just mirrors
Jonathan Earl Brassow [Tue, 29 Mar 2011 12:51:57 +0000 (12:51 +0000)]
s/MIRROR_NOTSYNCED/LV_NOTSYNCED/ - Flag will may refer to more than just mirrors

13 years agoReduce amount of vgremove and vgchange calls
Zdenek Kabelac [Mon, 28 Mar 2011 11:35:20 +0000 (11:35 +0000)]
Reduce amount of vgremove and vgchange calls

A bit noticable time defference when whole test-suite is run through valgrind.

13 years agoRename _check_version
Alasdair Kergon [Sun, 27 Mar 2011 13:44:08 +0000 (13:44 +0000)]
Rename _check_version

13 years agoUse hard-coded /dev/mapper/control details for 2.6.36+ kernels and simplify
Alasdair Kergon [Fri, 25 Mar 2011 23:50:35 +0000 (23:50 +0000)]
Use hard-coded /dev/mapper/control details for 2.6.36+ kernels and simplify
associated code.  (Some obscure configurations that happened to work before
are no longer supported.)

13 years agoFix unhandled condition in _move_lv_segments
Jonathan Earl Brassow [Fri, 25 Mar 2011 22:02:27 +0000 (22:02 +0000)]
Fix unhandled condition in _move_lv_segments

If _move_lv_segments is passed a 'lv_from' that does not yet
have any segments, it will screw things up because the code
that does the segment copy assumes there is at least one
segment.  See copy code here:
        lv_to->segments = lv_from->segments;
        lv_to->segments.n->p = &lv_to->segments;
        lv_to->segments.p->n = &lv_to->segments;

If 'segments' is an empty list, the first statement copies over
the values, but the next two reset those values to point to the
other LV's list structure.  'lv_to' now appears to have one
segment, but it is really an ill-set pointer.

13 years agoReplace malloc with zalloc when creating segment_type's
Jonathan Earl Brassow [Fri, 25 Mar 2011 21:59:42 +0000 (21:59 +0000)]
Replace malloc with zalloc when creating segment_type's

13 years agocosmetic change - swapping one macro for another
Jonathan Earl Brassow [Fri, 25 Mar 2011 21:56:28 +0000 (21:56 +0000)]
cosmetic change - swapping one macro for another

When I see 'seg_is_mirrored', I expect the argument to be an lv_segment.
In this case, it is lvcreate_params.  Both structures, have a 'segtype'
entry which the macro dereferences.  However, it just seems easier to
understand if we do 'segtype_is_mirrored' instead.

13 years agoWhat's new.
Petr Rockai [Thu, 24 Mar 2011 16:03:32 +0000 (16:03 +0000)]
What's new.

13 years agoIn some cases, we could end up with a mirrored LV without a MIRRORED flag. In
Petr Rockai [Thu, 24 Mar 2011 12:28:02 +0000 (12:28 +0000)]
In some cases, we could end up with a mirrored LV without a MIRRORED flag. In
other cases, the code could wind up removing wrong number of mirrors. In yet
other cases, we could remove the right number of mirrors, but fail to respect
the removal preferences (i.e. keep an image that was requested to be removed
while removing an image that was requested to be kept). Under some
circumstances, remove_mirror_images could also get stuck in an infinite loop.

This patch should fix all of the above undesirable behaviours.

Signed-off-by: Petr Rockai <prockai@redhat.com>
Reviewed-by: Jonathan Brassow <jbrassow@redhat.com>
13 years agoRelease allocated memory on closedown
Zdenek Kabelac [Thu, 24 Mar 2011 10:45:00 +0000 (10:45 +0000)]
Release allocated memory on closedown

Release allocated buffers before exit() in debug singlenode - so it's not
poping out in valgrind as memory leak.

13 years agoFix last checkin - added error message text wrong.
Alasdair Kergon [Sun, 20 Mar 2011 02:00:52 +0000 (02:00 +0000)]
Fix last checkin - added error message text wrong.

13 years agoImprove debug stack trace
Zdenek Kabelac [Fri, 18 Mar 2011 13:21:02 +0000 (13:21 +0000)]
Improve debug stack trace

dm_check_version reports log_error() - so use return_NULL.

13 years agoMitigate some warnings if running as non-root user.
Milan Broz [Fri, 18 Mar 2011 12:17:57 +0000 (12:17 +0000)]
Mitigate some warnings if running as non-root user.

LVM doesn't behave correctly if running as non-root user,
there is warning when it detects it.

Despite this, it produces many error messages, saying nothing.
See https://bugzilla.redhat.com/show_bug.cgi?id=620571

This patch fixes two things:
1) Removes eror message from device_is_usable() which has no
information value anyway (real warning is printed inside it).

2) it fixes device-mapper initialization, if we support
core dm module autoload and device node is present, it should
fail early and not try recreate existing and correct node.
(non-root == permission denied here)

N.B. In future code should support user roles, some more
drastic checks in code are probably contraproductive now.

13 years agoWatch out for collisions in GDB global namespace.
Jonathan Earl Brassow [Mon, 14 Mar 2011 18:05:56 +0000 (18:05 +0000)]
Watch out for collisions in GDB global namespace.
Better 'lv_status_r' printing.

13 years agoAdd missing \0 for grown debug object
Zdenek Kabelac [Mon, 14 Mar 2011 17:00:57 +0000 (17:00 +0000)]
Add missing \0 for grown debug object

Attach \0 for proper char* display - otherwise somewhat random message could
be displayed in debug more and read of unpredictable read of uninitilized
memory values could happen.

13 years agoRevert this commit
Zdenek Kabelac [Sun, 13 Mar 2011 23:18:30 +0000 (23:18 +0000)]
Revert this commit

This buffer allocation must have been problem somewhere else.
(as sizeof() already has the 'extra' '\0' included).
For now reverting this commit.

13 years agoFix allocation of system_id
Zdenek Kabelac [Sun, 13 Mar 2011 23:05:48 +0000 (23:05 +0000)]
Fix allocation of system_id

As code uses strncpy(system_id, NAME_LEN) and doesn't set '\0'
Fix it by always allocating NAME_LEN + 1 buffer size and with zalloc
we always get '\0' as the last byte.

This bug may trigger some unexpected behavior of the string operation
code - depends on the pool allocator.

FIXME: refactor this code to alloc_vg.

13 years agoUse proper size of strncpy
Zdenek Kabelac [Sun, 13 Mar 2011 23:01:08 +0000 (23:01 +0000)]
Use proper size of strncpy

Avoid reading extra character if we expect to have there '\0'.

13 years agoFix buffer allocation size for uuid string
Zdenek Kabelac [Sun, 13 Mar 2011 22:57:51 +0000 (22:57 +0000)]
Fix buffer allocation size for uuid string

We have 3 components and traling '\0' so allocate proper room for all of them.
Problem was nicely hidden by allocation from pool and allocation aligment
offset - so to trigger real problem with this one is actually hard.

13 years agoFix usage of readlink
Zdenek Kabelac [Sun, 13 Mar 2011 22:52:16 +0000 (22:52 +0000)]
Fix usage of readlink

Return value of readlink limits valid string size.
Characters after returned size present some garbage to printf.
Fix it by placing '\0' on the return size value.

13 years agoRemove compile warning for lock_id.
Peter Rajnoha [Sun, 13 Mar 2011 18:08:26 +0000 (18:08 +0000)]
Remove compile warning for lock_id.

%llx --> PRIx64

13 years agolv_status_r now prints out status of attached log LVs
Jonathan Earl Brassow [Fri, 11 Mar 2011 22:25:36 +0000 (22:25 +0000)]
lv_status_r now prints out status of attached log LVs

(Print layout could be nicer... :(

13 years agolv_status_r has been fixed-up so that it supports infinite LV stacking
Jonathan Earl Brassow [Fri, 11 Mar 2011 22:16:38 +0000 (22:16 +0000)]
lv_status_r has been fixed-up so that it supports infinite LV stacking

(It does not yet follow 'log_lv' or 'origin' links.)

13 years agodetect RAID* LV and segment flags.
Jonathan Earl Brassow [Fri, 11 Mar 2011 18:22:39 +0000 (18:22 +0000)]
detect RAID* LV and segment flags.

13 years agoUse format instance mempool where possible and adequate.
Peter Rajnoha [Fri, 11 Mar 2011 15:10:16 +0000 (15:10 +0000)]
Use format instance mempool where possible and adequate.

13 years agoVarious cleanups for fid mem and ref_count changes.
Peter Rajnoha [Fri, 11 Mar 2011 15:08:31 +0000 (15:08 +0000)]
Various cleanups for fid mem and ref_count changes.

Missing free_vg on error_path in lvmcache_get_vg fn. Call destroy_instance
only if the fid is not part of the vg in backup_read_vg fn (otherwise it's
part of the VG we're returning and we definitely don't want to destroy it!).

13 years agoCall destroy_instance for any PVs found in VG structure during vg_free call.
Peter Rajnoha [Fri, 11 Mar 2011 15:06:13 +0000 (15:06 +0000)]
Call destroy_instance for any PVs found in VG structure during vg_free call.

This is necessary for proper format instance ref_count support. We iterate
over vg->pvs and vg->removed_pvs list and the ref_count is decremented and
then it is destroyed if not referenced anymore.

13 years agoAdd new free_pv_fid fn and use it throughout to free all attached fids.
Peter Rajnoha [Fri, 11 Mar 2011 14:56:56 +0000 (14:56 +0000)]
Add new free_pv_fid fn and use it throughout to free all attached fids.

Since format instances will use own memory pool, it's necessary to properly
deallocate it. For now, only fid is deallocated. The PV structure itself
still uses cmd mempool mostly, but anytime we'd like to add a mempool
in the struct physical_volume, we can just rename this fn to free_pv and
add the code (like we have free_vg fn for VGs).

13 years agoUse only vg_set_fid and new pv_set_fid fn to assign the format instance.
Peter Rajnoha [Fri, 11 Mar 2011 14:50:13 +0000 (14:50 +0000)]
Use only vg_set_fid and new pv_set_fid fn to assign the format instance.

This is essential for proper format instance ref_count support. We must
use these functions to set the fid everywhere from now on, even the NULL
value!

13 years agoMake create_text_context fn static and move it inside create_instance fn.
Peter Rajnoha [Fri, 11 Mar 2011 14:45:17 +0000 (14:45 +0000)]
Make create_text_context fn static and move it inside create_instance fn.

We'd like to use the fid mempool for text_context that is stored
in the instance (we used cmd mempool before, so the order of
initialisation was not a matter, but now it is since we need to
create the fid mempool first which happens in create_instance fn).

The text_context initialisation is not needed anywhere outside the
create_instance fn so move it there.

13 years agoAdd mem and ref_count fields to struct format_instance for own mempool use.
Peter Rajnoha [Fri, 11 Mar 2011 14:38:38 +0000 (14:38 +0000)]
Add mem and ref_count fields to struct format_instance for own mempool use.

Format instances can be created anytime on demand and it contains
metadata area information mostly (at least for now, but in the future,
we may store more things here to update/edit in a PV/VG). In case we
have lots of metadata areas, memory consumption will rise. Using cmd
context mempool is not quite optimal here because it is destroyed too
late. So let's use a separate mempool for format instances.

Reference counting is used because fids could be shared, e.g. each PV
has either a PV-based fid or VG-based fid. If it's VG-based, each PV has
a shared fid with the VG - a reference to VG's fid.

13 years agoUse new alloc_fid fn for common format instance initialisation.
Peter Rajnoha [Fri, 11 Mar 2011 14:30:27 +0000 (14:30 +0000)]
Use new alloc_fid fn for common format instance initialisation.

13 years agoMissed merge fix in vg_validate patch
Zdenek Kabelac [Thu, 10 Mar 2011 22:39:36 +0000 (22:39 +0000)]
Missed merge fix in vg_validate patch

13 years agoDocument pv_min_size in lvm.conf manpage
Zdenek Kabelac [Thu, 10 Mar 2011 15:20:10 +0000 (15:20 +0000)]
Document pv_min_size in lvm.conf manpage

13 years agoOptimise _eat_space and _get_token
Zdenek Kabelac [Thu, 10 Mar 2011 14:51:35 +0000 (14:51 +0000)]
Optimise _eat_space and _get_token

Makes the code more readable and has a smaller number of memory
accesses thus it's small optimisation as well.

For _get_token() optimize number parsing. Check for '.' char only
if it's not a digit. Move pointer incrementation into one place.

For _eat_space() check only p->te for '\0' in skipping of comment line.
Avoid check for '\0' when we know it is space. Also master while loop
doesn't need checking p->tb for '\0'. We just need to check p->tb
isn't already at the end of buffer. This could give 'extra' loop cycle
if we are already there - but safes memory access in every other case.

13 years agoKeep pool name also for pool-fast
Zdenek Kabelac [Thu, 10 Mar 2011 14:49:01 +0000 (14:49 +0000)]
Keep pool name also for pool-fast

It's cheap to keep this name - and it is useful for 'non pool debug code'
compilation.

13 years agoIndent spaces to tabs
Zdenek Kabelac [Thu, 10 Mar 2011 14:47:22 +0000 (14:47 +0000)]
Indent spaces to tabs

13 years agoRefactor code for _lv_postoder
Zdenek Kabelac [Thu, 10 Mar 2011 14:40:32 +0000 (14:40 +0000)]
Refactor code for _lv_postoder

Add _lv_postorder_vg() - for calling _lv_postorder() for every LV from VG.
We use this in 2 places -  vg_mark_partial_lvs() and vg_validate()
so make it as a one function.

Benefit here is - to use only one cleanup code and avoid
potentially duplicate scans of same LVs.

13 years agogdbinit - A GDB init file to help while debugging LVM.
Jonathan Earl Brassow [Thu, 10 Mar 2011 13:45:12 +0000 (13:45 +0000)]
gdbinit - A GDB init file to help while debugging LVM.

Copy this file as '.gdbinit' to your home directory or your working
directory.  It adds the following commands to gdb:
 - first_seg
 - lv_status
 - lv_status_r
 - lv_is_mirrored
 - seg_item
 - seg_status
 - segs_using_this_lv

You can get a list of these user-defined commands by typing:
(gdb) help user-defined

You can get more information on each command by typing:
(gdb) help <command>

13 years agoUse hash tables for validating names
Zdenek Kabelac [Thu, 10 Mar 2011 13:11:59 +0000 (13:11 +0000)]
Use hash tables for validating names

Accelerate validation loop by using lvname, lvid, pvid hash tables.
Also merge pvl loop into one cycle now - no need to scan the list twice.
List scan is stopped when dm_hash_insert fails.

The error message with loop_counter1 is no longer provided - however
the message has been misleading anyway.

13 years agoFix dmsetup man page typo (John Bradshaw)
Milan Broz [Thu, 10 Mar 2011 13:11:45 +0000 (13:11 +0000)]
Fix dmsetup man page typo (John Bradshaw)

13 years agoUse void pointer instead of char for binary key
Zdenek Kabelac [Thu, 10 Mar 2011 12:48:40 +0000 (12:48 +0000)]
Use void pointer instead of char for binary key

dm_hash binary functions takes void* key - so there is no need to cast
pointers to char* (also the hash key does not have trailing '\0').

This is slight API change, but presents no change for the API user side
it just allows to write code easier as the casting could be removed.

13 years agoRefactor vg allocation code
Zdenek Kabelac [Thu, 10 Mar 2011 12:43:29 +0000 (12:43 +0000)]
Refactor vg allocation code

Create new function alloc_vg() to allocate VG structure.

It takes pool_name (for easier debugging).
and also take vg_name to futher simplify code.

Move remainder of _build_vg_from_pds  to _pool_vg_read
and use vg memory pool for import functions.
(it's been using smem -> fid mempool -> cmd mempool)
(FIXME: remove mempool parameter for import functions and use vg).

Move remainder of the _build_vg to _format1_vg_read

13 years agoAvoid possible endless loop in _free_vginfo when 4 or more VGs have same name.
Alasdair Kergon [Thu, 10 Mar 2011 03:03:03 +0000 (03:03 +0000)]
Avoid possible endless loop in _free_vginfo when 4 or more VGs have same name.

13 years agoUse empty string instead of /dev// for LV path when there's no VG.
Alasdair Kergon [Wed, 9 Mar 2011 12:44:42 +0000 (12:44 +0000)]
Use empty string instead of /dev// for LV path when there's no VG.
Don't allocate unused VG mempool in _pvsegs_sub_single.

13 years agoDo not send random bytes in message
Zdenek Kabelac [Tue, 8 Mar 2011 22:48:50 +0000 (22:48 +0000)]
Do not send random bytes in message

Fixing few issues:

struct clvm_header  contains  'char args[1]' - so adding '+ 1' here
for message length calculation is 1 byte off.
Message with last byte uninitialized is then passed to write function.
Update also related arglen.

Initialise xid and clintid to 0.

Memory allocation is checked for NULL

13 years agoFix reading byte from char params[-1] position
Zdenek Kabelac [Tue, 8 Mar 2011 22:43:19 +0000 (22:43 +0000)]
Fix reading byte from char params[-1] position

When the ->params string is empty - memory access is made on the byte
before allocated buffer (catched by valgrind) - in the case it would
constain 0x20 - it would even overwrite this buffer.
So fix by checking len > 0 before doing such access.
Also slightly optimise this loop from repeated strlen call.

13 years agoFix clvmd return code for bad options.
Milan Broz [Tue, 8 Mar 2011 13:27:39 +0000 (13:27 +0000)]
Fix clvmd return code for bad options.

We should return exit code 2 for unknown option.

Patch also adds standard --help option instead.

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

13 years agoFix test for 8k page (fails on Sparc architecture).
Milan Broz [Sun, 6 Mar 2011 18:28:09 +0000 (18:28 +0000)]
Fix test for 8k page (fails on Sparc architecture).

13 years agoUse lvm_getpagesize wrapper
Zdenek Kabelac [Sun, 6 Mar 2011 17:52:07 +0000 (17:52 +0000)]
Use lvm_getpagesize wrapper

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