Bug 1247378

Summary: core dump when attempting to create striped cache pool w/ one lvcreate cmdline
Product: Red Hat Enterprise Linux 7 Reporter: Corey Marthaler <cmarthal>
Component: lvm2Assignee: Zdenek Kabelac <zkabelac>
lvm2 sub component: Cache Logical Volumes QA Contact: cluster-qe <cluster-qe>
Status: CLOSED ERRATA Docs Contact:
Severity: medium    
Priority: medium CC: agk, heinzm, jbrassow, msnitzer, prajnoha, zkabelac
Version: 7.2Keywords: Triaged
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: lvm2-2.02.130-2.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-11-19 12:47:06 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Corey Marthaler 2015-07-27 20:40:29 UTC
Description of problem:
Striped cache pool creation works if you first create striped volumes for pool and metadata and then use lvconvert, however when attempted with the same cmdline it fails.

[root@host-109 ~]# lvcreate -i 1 --cachepolicy smq --type cache-pool -L 2G -n POOL2 cache_sanity /dev/sdh1 /dev/sdg1
  Logical volume "POOL2" created.

[root@host-109 ~]# lvs -a -o +devices
  LV              Attr       LSize   Pool   Origin          Data% Meta% Cpy%Sync Devices
  [POOL]          Cwi---C---   2.00g                        0.00  3.47  100.00   POOL_cdata(0)
  POOL2           Cwi---C---   2.00g                                             POOL2_cdata(0)
  [POOL2_cdata]   Cwi-------   2.00g                                             /dev/sdh1(2)
  [POOL2_cmeta]   ewi-------   8.00m                                             /dev/sdh1(0)
  [POOL_cdata]    Cwi-ao----   2.00g                                             /dev/sdb1(4)
  [POOL_cmeta]    ewi-ao----   8.00m                                             /dev/sdb1(2)
  corigin         Cwi-a-C---   4.00g [POOL] [corigin_corig] 0.00  3.47  100.00   corigin_corig(0)
  [corigin_corig] owi-aoC---   4.00g                                             /dev/sde1(0)
  [lvol0_pmspare] ewi-------   8.00m                                             /dev/sdb1(0)

[root@host-109 ~]# lvcreate -i 2 --cachepolicy smq --type cache-pool -L 2G -n POOL3 cache_sanity /dev/sdh1 /dev/sdg1
  Using default stripesize 64.00 KiB.
lvcreate: datastruct/list.c:34: dm_list_add: Assertion `head->n' failed.
Aborted (core dumped)


Core was generated by `lvcreate -i 2 --cachepolicy smq --type cache-pool -L 2G -n POOL3 cache_sanity /'.
Program terminated with signal 6, Aborted.
#0  0x00007fda43dc75d7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
56        return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig);
Missing separate debuginfos, use: debuginfo-install bzip2-libs-1.0.6-13.el7.x86_64 elfutils-libelf-0.163-1.el7.x86_64 elfutils-libs-0.163-1.el7.x86_64 libattr-2.4.46-12.el7.x86_64 libcap-2.22-8.el7.x86_64 libgcc-4.8.5-4.el7.x86_64 libselinux-2.2.2-6.el7.x86_64 libsepol-2.1.9-3.el7.x86_64 ncurses-libs-5.9-13.20130511.el7.x86_64 pcre-8.32-15.el7.x86_64 xz-libs-5.1.2-10alpha.el7.x86_64 zlib-1.2.7-15.el7.x86_64
(gdb) 
(gdb) bt
#0  0x00007fda43dc75d7 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1  0x00007fda43dc8cc8 in __GI_abort () at abort.c:90
#2  0x00007fda43dc0546 in __assert_fail_base (fmt=0x7fda43f101e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x7fda443d3fb2 "head->n", 
    file=file@entry=0x7fda443d3fa0 "datastruct/list.c", line=line@entry=34, function=function@entry=0x7fda443d3fe0 <__PRETTY_FUNCTION__.6354> "dm_list_add") at assert.c:92
#3  0x00007fda43dc05f2 in __GI___assert_fail (assertion=assertion@entry=0x7fda443d3fb2 "head->n", file=file@entry=0x7fda443d3fa0 "datastruct/list.c", line=line@entry=34, 
    function=function@entry=0x7fda443d3fe0 <__PRETTY_FUNCTION__.6354> "dm_list_add") at assert.c:101
#4  0x00007fda443a2f8d in dm_list_add (head=head@entry=0x7fda46cf8780, elem=elem@entry=0x7fda46cdc858) at datastruct/list.c:34
#5  0x00007fda44eec63c in _alloc_parallel_area (ix_log_offset=0, alloc_state=0x7ffd31e246b0, max_to_allocate=514, ah=0x7fda46cf86f0) at metadata/lv_manip.c:1840
#6  _find_some_parallel_space (max_to_allocate=514, parallel_pvs=<optimized out>, alloc_state=0x7ffd31e246b0, pvms=0x7fda46cdc710, ah=0x7fda46cf86f0) at metadata/lv_manip.c:2827
#7  _find_max_parallel_space_for_one_policy (alloc_state=0x7ffd31e246b0, pvms=0x7fda46cdc710, alloc_parms=0x7ffd31e24690, ah=0x7fda46cf86f0) at metadata/lv_manip.c:2891
#8  _allocate (can_split=1, allocatable_pvs=<optimized out>, lv=0x7fda46cf85a8, vg=<optimized out>, ah=0x7fda46cf86f0) at metadata/lv_manip.c:3017
#9  allocate_extents (vg=<optimized out>, lv=lv@entry=0x7fda46cf85a8, segtype=segtype@entry=0x7fda46c7e9a0, stripes=stripes@entry=2, mirrors=mirrors@entry=1, 
    log_count=<optimized out>, region_size=region_size@entry=2, extents=extents@entry=512, allocatable_pvs=allocatable_pvs@entry=0x7fda46ccc838, alloc=ALLOC_NORMAL, 
    alloc@entry=ALLOC_INHERIT, approx_alloc=approx_alloc@entry=0, parallel_areas=parallel_areas@entry=0x0) at metadata/lv_manip.c:3318
#10 0x00007fda44ef5711 in lv_extend (lv=lv@entry=0x7fda46cf85a8, segtype=segtype@entry=0x7fda46c7e9a0, stripes=2, stripe_size=128, mirrors=1, region_size=2, extents=512, 
    allocatable_pvs=0x7fda46ccc838, alloc=ALLOC_INHERIT, approx_alloc=0) at metadata/lv_manip.c:3917
#11 0x00007fda44ef7231 in _lv_create_an_lv (vg=vg@entry=0x7fda46cf5d00, lp=lp@entry=0x7ffd31e249f0, new_lv_name=<optimized out>) at metadata/lv_manip.c:7235
#12 0x00007fda44ef93af in lv_create_single (vg=vg@entry=0x7fda46cf5d00, lp=lp@entry=0x7ffd31e249f0) at metadata/lv_manip.c:7605
#13 0x00007fda44e8b43a in lvcreate (cmd=0x7fda46c3e020, argc=<optimized out>, argv=<optimized out>) at lvcreate.c:1534
#14 0x00007fda44e937db in lvm_run_command (cmd=cmd@entry=0x7fda46c3e020, argc=3, argc@entry=14, argv=0x7ffd31e24f90, argv@entry=0x7ffd31e24f38) at lvmcmdline.c:1603
#15 0x00007fda44e93fe9 in lvm2_main (argc=14, argv=0x7ffd31e24f38) at lvmcmdline.c:2068
#16 0x00007fda43db3af5 in __libc_start_main (main=0x7fda44e7a860 <main>, argc=14, ubp_av=0x7ffd31e24f38, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
    stack_end=0x7ffd31e24f28) at libc-start.c:274
#17 0x00007fda44e7a891 in _start ()



Version-Release number of selected component (if applicable):
3.10.0-296.el7.x86_64
lvm2-2.02.125-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
lvm2-libs-2.02.125-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
lvm2-cluster-2.02.125-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
device-mapper-1.02.102-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
device-mapper-libs-1.02.102-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
device-mapper-event-1.02.102-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
device-mapper-event-libs-1.02.102-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015
device-mapper-persistent-data-0.5.4-1.el7    BUILT: Fri Jul 17 08:56:22 CDT 2015
cmirror-2.02.125-2.el7    BUILT: Fri Jul 10 03:42:29 CDT 2015

Comment 2 Zdenek Kabelac 2015-09-08 15:31:23 UTC
I'll provide patch which will disable  use of striping when allocating cache-pool.

We can't handle such complex operation in 1 command ATM.

Provided  PVs are meant to be space for   data  & metadata LV

Allocator is not set-up to handle also striping allocation at the same time.
Moreover it logically  fails since it's unclear if we want striped only data or metadata or both.

The error is even more visible when larger number of striping is requested.

Until these question are answered the only way is to disable use of striping.

If user want's stripped data or metadata he currently needs to start with low-level LVs and convert them into cache-pool.

Comment 3 Zdenek Kabelac 2015-09-11 12:31:08 UTC
Option -i is  now disabled when creating cache-pool with this upstream commit:

https://www.redhat.com/archives/lvm-devel/2015-September/msg00085.html

Comment 5 Corey Marthaler 2015-09-23 16:10:42 UTC
Marking verified in the latest rpms. It is no longer possible to use '-i' when creating a cache pool volume.

[root@host-109 ~]# lvcreate -i 1 --cachepolicy smq --type cache-pool -L 2G -n POOL2 cache_sanity /dev/sdh1 /dev/sdg1
  Option --stripes is unsupported with cache pools.
  Run `lvcreate --help' for more information.

[root@host-109 ~]# lvcreate -i 2 --cachepolicy smq --type cache-pool -L 2G -n POOL3 cache_sanity /dev/sdh1 /dev/sdg1
  Option --stripes is unsupported with cache pools.
  Run `lvcreate --help' for more information.


3.10.0-313.el7.x86_64
lvm2-2.02.130-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
lvm2-libs-2.02.130-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
lvm2-cluster-2.02.130-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
device-mapper-1.02.107-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
device-mapper-libs-1.02.107-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
device-mapper-event-1.02.107-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
device-mapper-event-libs-1.02.107-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
device-mapper-persistent-data-0.5.5-1.el7    BUILT: Thu Aug 13 09:58:10 CDT 2015
cmirror-2.02.130-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015
sanlock-3.2.4-1.el7    BUILT: Fri Jun 19 12:48:49 CDT 2015
sanlock-lib-3.2.4-1.el7    BUILT: Fri Jun 19 12:48:49 CDT 2015
lvm2-lockd-2.02.130-2.el7    BUILT: Tue Sep 15 07:15:40 CDT 2015

Comment 6 errata-xmlrpc 2015-11-19 12:47:06 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2147.html