All of lore.kernel.org
 help / color / mirror / Atom feed
From: Martin Papik <mp6058@gmail.com>
To: LVM general discussion and development <linux-lvm@redhat.com>
Subject: Re: [linux-lvm] pvmove ==> segfault: pvs --all -o +vg_fmt
Date: Wed, 24 Jul 2013 06:33:16 +0300	[thread overview]
Message-ID: <51EF4AFC.2030601@gmail.com> (raw)
In-Reply-To: <51EDEE5E.4010009@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 8465 bytes --]


No reply yet so I thought I'd modify the subject to catch someone's eye.

Martin

On 07/23/2013 05:45 AM, Martin Papik wrote:
>
> Thank you. Is that patch going to be added to the main source code base?
>
> I think I found an error (segfault), see below.
>
> ==> I have a few more improvement suggestions.
>
> * IMHO vgs/lvs should include a column called seg_size_pe, similar to 
> seg_start and seg_start_pe
> * IMHO vgs/lvs/pvs should have an command line parameter, or option 
> modifier allowing to not display empty columns, i.e. the following 
> command might skip displaying origin, snap%, move, log, copy%, 
> convert, because they have no values. That would allow me to show 
> copy_percent column only when copy is in progress. Would be nice.
>
> lvs --all -o +vg_extent_size
>   LV      VG     Attr   LSize   Origin Snap%  Move Log Copy%  Convert Ext
>   boot    volume -wi-ao 1.00g                                       4.00m
>   copy    volume -wi-ao 2.00t                                       4.00m
>   emulate volume -wi-ao 50.00g                                       4.00m
>   home    volume -wi-ao 150.00g                                       
> 4.00m
>   p2p     volume -wi-a- 300.00g                                       
> 4.00m
>   root    volume -wi-ao 4.00g                                       4.00m
>   swap    volume -wi-ao 8.00g                                       4.00m
>   tmp     volume -wi-ao 2.00g                                       4.00m
>   usr     volume -wi-ao 20.00g                                       4.00m
>   var     volume -wi-ao 20.00g                                       4.00m
>
> Possible error:
>
> root@localhost# lvs --rows --align
> Does not align, should it?
>
> *==> SEGFAULT INFO*
>
> root@localhost# pvs --all -o +vg_fmt
> Segmentation fault (core dumped)
>
> However the following seems to work.....
>
> root@localhost# pvs --all -o +vg_name
>   PV         VG     Fmt  Attr PSize PFree VG
>   /dev/dm-0              --      0     0
>   --- some entries removed for brevity ----
>   /dev/md127 volume lvm2 a-   5.46t 2.77t volume
>   --- some entries removed for brevity ----
>   /dev/sde1              --      0     0
>
> Additional information that might help.
>
> root@localhost# pvs --version
>   LVM version:     2.02.66(2) (2010-05-20)
>   Library version: 1.02.48 (2010-05-20)
>   Driver version:  4.22.0
> root@localhost# cat /etc/lsb-release
> DISTRIB_ID=Ubuntu
> DISTRIB_RELEASE=12.04
> DISTRIB_CODENAME=precise
> DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"
>
> root@localhost#valgrind pvs --all -o +vg_fmt
> ==14584== Memcheck, a memory error detector
> ==14584== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
> ==14584== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright 
> info
> ==14584== Command: pvs --all -o +vg_fmt
> ==14584==
> ==14584== Invalid read of size 8
> ==14584==    at 0x548ED77: dm_report_field_string (in 
> /lib/libdevmapper.so.1.02.1)
> ==14584==    by 0x549006F: dm_report_object (in 
> /lib/libdevmapper.so.1.02.1)
> ==14584==    by 0x46B138: report_object (in /sbin/lvm)
> ==14584==    by 0x423618: ??? (in /sbin/lvm)
> ==14584==    by 0x4254B2: process_each_pv (in /sbin/lvm)
> ==14584==    by 0x4230D3: ??? (in /sbin/lvm)
> ==14584==    by 0x41AE60: lvm_run_command (in /sbin/lvm)
> ==14584==    by 0x41B307: lvm2_main (in /sbin/lvm)
> ==14584==    by 0x58CE76C: (below main) (libc-start.c:226)
> ==14584==  Address 0x28 is not stack'd, malloc'd or (recently) free'd
> ==14584==
> ==14584==
> ==14584== Process terminating with default action of signal 11 (SIGSEGV)
> ==14584==  Access not within mapped region at address 0x28
> ==14584==    at 0x548ED77: dm_report_field_string (in 
> /lib/libdevmapper.so.1.02.1)
> ==14584==    by 0x549006F: dm_report_object (in 
> /lib/libdevmapper.so.1.02.1)
> ==14584==    by 0x46B138: report_object (in /sbin/lvm)
> ==14584==    by 0x423618: ??? (in /sbin/lvm)
> ==14584==    by 0x4254B2: process_each_pv (in /sbin/lvm)
> ==14584==    by 0x4230D3: ??? (in /sbin/lvm)
> ==14584==    by 0x41AE60: lvm_run_command (in /sbin/lvm)
> ==14584==    by 0x41B307: lvm2_main (in /sbin/lvm)
> ==14584==    by 0x58CE76C: (below main) (libc-start.c:226)
> ==14584==  If you believe this happened as a result of a stack
> ==14584==  overflow in your program's main thread (unlikely but
> ==14584==  possible), you can try to increase the size of the
> ==14584==  main thread stack using the --main-stacksize= flag.
> ==14584==  The main thread stack size used in this run was 8388608.
> ==14584==
>
> root@localhost# ltrace pvs --all -o +vg_fmt 2>&1 | tail
> __ctype_toupper_loc()                            = 0x7f2f0e83f768
> __ctype_toupper_loc()                            = 0x7f2f0e83f768
> __ctype_toupper_loc()                            = 0x7f2f0e83f768
> __sprintf_chk(0x1e86e88, 1, -1, 0x48daa5, 0x48dab8) = 2
> dm_pool_strdup(0x1e88120, 0x1e86e88, 0x1e86e8a, 0, 0x48daa8) = 0x1e8e538
> dm_pool_alloc(0x1e88120, 8, 2, 0x7f2f0d892030, 0x48daa8) = 0x1e8e540
> dm_report_field_set_value(0x1e8e508, 0x1e8e538, 0x1e8e540, 
> 0x7f2f0d892030, 0x48daa8) = 0x1e8e540
> dm_report_field_string(0x1e88080, 0x1e8e550, 40, 0x6b1fe0, 0x1e6cfe0 
> <unfinished ...>
> --- SIGSEGV (Segmentation fault) ---
> +++ killed by SIGSEGV +++
> root@localhost#
>
> root@localhost# gdb --args pvs --all -o +vg_fmt
> GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04
> Copyright (C) 2012 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later 
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law. Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-linux-gnu".
> For bug reporting instructions, please see:
> <http://bugs.launchpad.net/gdb-linaro/>...
> Reading symbols from /sbin/pvs...(no debugging symbols found)...done.
> (gdb) run
> Starting program: /sbin/pvs --all -o +vg_fmt
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
> File descriptor 3 (socket:[46992174]) leaked on pvs invocation. Parent 
> PID 14623: gdb
> File descriptor 4 (socket:[46992175]) leaked on pvs invocation. Parent 
> PID 14623: gdb
> File descriptor 5 (pipe:[46992176]) leaked on pvs invocation. Parent 
> PID 14623: gdb
> File descriptor 6 (pipe:[46992176]) leaked on pvs invocation. Parent 
> PID 14623: gdb
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007ffff757dd77 in dm_report_field_string () from 
> /lib/libdevmapper.so.1.02.1
> (gdb) disassemble dm_report_field_string
> Dump of assembler code for function dm_report_field_string:
>    0x00007ffff757dd70 <+0>:    push   %rbx
>    0x00007ffff757dd71 <+1>:    mov    %rsi,%rbx
>    0x00007ffff757dd74 <+4>:    mov    (%rdi),%rdi
> => 0x00007ffff757dd77 <+7>:    mov (%rdx),%rsi
>    0x00007ffff757dd7a <+10>:    callq 0x7ffff7570a30 <dm_pool_strdup@plt>
>    0x00007ffff757dd7f <+15>:    test   %rax,%rax
> (gdb) info registers
> rax            0x6dd550    7198032
> rbx            0x6dd550    7198032
> rcx            0x6b1fe0    7020512
> rdx            0x28    40
> rsi            0x6dd550    7198032
> rdi            0x6d7120    7172384
> rbp            0x6d7080    0x6d7080
>
>
>
> On 07/20/2013 02:20 AM, Alasdair G Kergon wrote:
>> It uses lists of ranges separated by colons.
>>
>>    :x-y
>>
>> If x is missing, 0 is inserted; if y is missing, the last extent on the device
>> is inserted.
>>
>> Man pages can always be improved with more examples!
>>
>> For +length, try the patch below.
>>
>> Alasdair
>>
>>
>> --- a/tools/toollib.c
>> +++ b/tools/toollib.c
>> @@ -1001,7 +1001,7 @@ static int _parse_pes(struct dm_pool *mem, char *c, struct dm_list *pe_ranges,
>>   		      const char *pvname, uint32_t size)
>>   {
>>   	char *endptr;
>> -	uint32_t start, end;
>> +	uint32_t start, end, len;
>>   
>>   	/* Default to whole PV */
>>   	if (!c) {
>> @@ -1041,7 +1041,16 @@ static int _parse_pes(struct dm_pool *mem, char *c, struct dm_list *pe_ranges,
>>   					goto error;
>>   				c = endptr;
>>   			}
>> +		} else if (*c == '+') {	/* Length? */
>> +			c++;
>> +			if (isdigit(*c)) {
>> +				if (!xstrtouint32(c, &endptr, 10, &len))
>> +					goto error;
>> +				c = endptr;
>> +				end = start + (len ? (len - 1) : 0);
>> +			}
>>   		}
>> +
>>   		if (*c && *c != ':')
>>   			goto error;
>>   
>


[-- Attachment #2: Type: text/html, Size: 17693 bytes --]

  reply	other threads:[~2013-07-24  3:33 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-19 18:14 [linux-lvm] pvmove Martin Papik
2013-07-19 19:59 ` Zdenek Kabelac
2013-07-19 22:27   ` Martin Papik
2013-07-19 23:20     ` Alasdair G Kergon
2013-07-23  2:45       ` Martin Papik
2013-07-24  3:33         ` Martin Papik [this message]
2013-09-23 20:38         ` Alasdair G Kergon
2013-09-23 20:56         ` Alasdair G Kergon
2013-09-23 21:10         ` Alasdair G Kergon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51EF4AFC.2030601@gmail.com \
    --to=mp6058@gmail.com \
    --cc=linux-lvm@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.