All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC LVM2] (0/6) Stacking LVs
@ 2007-10-11 22:30 Jun'ichi Nomura
  2007-10-11 22:54 ` [RFC LVM2] (1/6) Add 'const' to PV accessor functions Jun'ichi Nomura
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:30 UTC (permalink / raw)
  To: lvm-devel

Hi,

I'm working on to extend LVM2 to allow an LV with both striped
and mirrored. (e.g. RAID10, RAID0+1)

I think the current direction toward such combination is
stacking LVs internally.
Attached patches allow such stacking by letting lvcreate/lvconvert
to take tagged LVs as source of the extent allocation.
So you can make striped LV on mirrored LVs, mirrored LV on striped LVs,
mirrored mirror log, etc.

The patches are still rough-edge.
I would like to hear comments if this approach is acceptable or not.
Especially, I'm curious about:
  - How much flexibility should the LVM2 allow for stacking?
    Current patch allows basically any combination of
    linear/striped/mirror.
  - Do we explicitly mark the LVs which can be used for stacking?
    Current version implicitly uses LVs if they are specified by
    tag in lvcreate/lvconvert/lvextend command line.
    However, I wonder explicit marking (e.g. lvchange --allocatable y)
    might be safer and allows cleaner implementation.
  - Should we introduce a new structure about free space management?
    Current version uses 'struct physical_volume' as such structure.

The patch set contains 6 patches:
  1) Adding 'const' to the accessor functions of struct physical volume
  2) Adding 'pv_dev_name()' to access the device name of PV
  3) Splitting the allocation/initialization part from _pv_create
  4) Modifying struct lv_segment_area so that AREA_LV segment can
     have a pointer to pv_segment
  5) Allowing striped-LV segment merging
  6) Allowing allocation from tagged LVs

>From 1) to 3) are cosmetic changes.
4) changes the layout of struct lv_segment_area and accessor macros.
5) becomes necessary if we have striped LV over mirrorred LVs
and extend the striped LV.
These are preparation patches and should not affect the current LVM2
functionality.

6) is the core part of the feature.
Attaching struct physical_volume to struct logical_volume when
the LV is used as an allocation source for other LV.

The other things we need may:
  - enhancements to the allocation logic
  - snapshot
      * Currently, snapshot implementation is in strange state.
          o If you do 'lvcreate -s -n lv1 lv0',
            in on-disk metadata, 'lv0' is the origin and
            'lv1' is the cow area. 'snapshotX' is the snapshot.
            While in device-mapper, 'lv1' is the snapshot
            and 'lv1-cow' is the cow.
          o If you resize 'lv1', it resizes the cow area.
            If you change 'lv1' to read-only, it changes the snapshot
            read-only.
        So, what if we would like to add mirror to the snapshot,
        for example?

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (1/6) Add 'const' to PV accessor functions
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
@ 2007-10-11 22:54 ` Jun'ichi Nomura
  2007-10-11 22:55 ` [RFC LVM2] (2/6) Add pv_dev_name() to access PV device name Jun'ichi Nomura
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:54 UTC (permalink / raw)
  To: lvm-devel

Accessor functions for PV will not modify the given PV.
So we can add 'const' to it.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America

-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-add-const-to-pv-accessors.patch
Type: text/x-patch
Size: 3289 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/d30fc1d0/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (2/6) Add pv_dev_name() to access PV device name
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
  2007-10-11 22:54 ` [RFC LVM2] (1/6) Add 'const' to PV accessor functions Jun'ichi Nomura
@ 2007-10-11 22:55 ` Jun'ichi Nomura
  2007-10-11 22:56 ` [RFC LVM2] (3/6) Add _pv_allocate() (split from _pv_create) Jun'ichi Nomura
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:55 UTC (permalink / raw)
  To: lvm-devel

In the patch "(6/6) Allow allocation from LV",
PV may be attached to LV.
In that case, the LV's name should be used as the PV's device name.

This patch adds pv_dev_name(), which decides whether dev_name(pv->dev)
or LV name should be used, and convert others to use it.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-pv_dev_name.patch
Type: text/x-patch
Size: 25823 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/f7a3c43d/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (3/6) Add _pv_allocate() (split from _pv_create)
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
  2007-10-11 22:54 ` [RFC LVM2] (1/6) Add 'const' to PV accessor functions Jun'ichi Nomura
  2007-10-11 22:55 ` [RFC LVM2] (2/6) Add pv_dev_name() to access PV device name Jun'ichi Nomura
@ 2007-10-11 22:56 ` Jun'ichi Nomura
  2007-10-11 22:56 ` [RFC LVM2] (4/6) Add 'pvseg' to AREA_LV lv_segment_area Jun'ichi Nomura
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:56 UTC (permalink / raw)
  To: lvm-devel

In the patch "(6/6) Allow allocation from LV",
'struct physical_volume' will be allocated from function
other than _pv_create().

This patch splits the allocation/initialization part from
_pv_create().

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-separate-pv_alloc.patch
Type: text/x-patch
Size: 2078 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/0afbb97b/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (4/6) Add 'pvseg' to AREA_LV lv_segment_area
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
                   ` (2 preceding siblings ...)
  2007-10-11 22:56 ` [RFC LVM2] (3/6) Add _pv_allocate() (split from _pv_create) Jun'ichi Nomura
@ 2007-10-11 22:56 ` Jun'ichi Nomura
  2007-10-11 22:57 ` [RFC LVM2] (5/6) Allow merging AREA_LV striped segments Jun'ichi Nomura
  2007-10-11 23:03 ` [RFC LVM2] (6/6) Allow allocation from LV Jun'ichi Nomura
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:56 UTC (permalink / raw)
  To: lvm-devel

Currently, struct lv_segment_area has a union member and
switches by its type (AREA_PV or AREA_LV).

As a preparation for the patch "(6/6) Allow allocation from LV",
where AREA_LV segment may have pv_segment, this patch changes
struct lv_segment_area.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-use-pvseg-for-AREA_LV.patch
Type: text/x-patch
Size: 1821 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/851c7091/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (5/6) Allow merging AREA_LV striped segments
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
                   ` (3 preceding siblings ...)
  2007-10-11 22:56 ` [RFC LVM2] (4/6) Add 'pvseg' to AREA_LV lv_segment_area Jun'ichi Nomura
@ 2007-10-11 22:57 ` Jun'ichi Nomura
  2007-10-11 23:03 ` [RFC LVM2] (6/6) Allow allocation from LV Jun'ichi Nomura
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 22:57 UTC (permalink / raw)
  To: lvm-devel

Currently, 'striped' segment can only be merged if the segment
is allocated from PV (AREA_PV).

This patch extends the mergeable check to cope with AREA_LV case.

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-merge-striped-lv-seg.patch
Type: text/x-patch
Size: 1182 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/9f6082ce/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [RFC LVM2] (6/6) Allow allocation from LV
  2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
                   ` (4 preceding siblings ...)
  2007-10-11 22:57 ` [RFC LVM2] (5/6) Allow merging AREA_LV striped segments Jun'ichi Nomura
@ 2007-10-11 23:03 ` Jun'ichi Nomura
  5 siblings, 0 replies; 7+ messages in thread
From: Jun'ichi Nomura @ 2007-10-11 23:03 UTC (permalink / raw)
  To: lvm-devel

This patch allows allocation from LV.

Example 1: striped LV on mirrored LV

# lvcreate -l4 -m1 --corelog testvg
  Logical volume "lvol0" created
# lvcreate -l4 -m1 --corelog testvg
  Logical volume "lvol1" created
# lvchange --addtag m testvg/lvol0 testvg/lvol1
  Logical volume "lvol0" changed
  Logical volume "lvol1" changed
# lvcreate -i2 -l2 testvg @m
  Using default stripesize 64.00 KB
  Logical volume "lvol2" created
# lvextend -l+2 testvg/lvol2 @m
  Using stripesize of last segment 64.00 KB
  Extending logical volume lvol2 to 16.00 MB
  Logical volume lvol2 successfully resized
# lvs -a -o name,attr,devices
  LV               Attr   Devices                            
  [lvol0]          mwi-ao lvol0_mimage_0(0),lvol0_mimage_1(0)
  [lvol0_mimage_0] iwi-ao /dev/mapper/d1(0)                  
  [lvol0_mimage_1] iwi-ao /dev/mapper/d2(0)                  
  [lvol1]          mwi-ao lvol1_mimage_0(0),lvol1_mimage_1(0)
  [lvol1_mimage_0] iwi-ao /dev/mapper/d3(0)                  
  [lvol1_mimage_1] iwi-ao /dev/mapper/d4(0)                  
  lvol2            -wi-a- lvol0(0),lvol1(0)        
# dmsetup ls --tree
testvg-lvol2 (253:15)
 |-testvg-lvol1 (253:14)
 |  |-testvg-lvol1_mimage_1 (253:13)
 |  |  `-d4 (253:4)
 |  |     `- (7:0)
 |  `-testvg-lvol1_mimage_0 (253:12)
 |     `-d3 (253:3)
 |        `- (7:0)
 `-testvg-lvol0 (253:11)
    |-testvg-lvol0_mimage_1 (253:10)
    |  `-d2 (253:2)
    |     `- (7:0)
    `-testvg-lvol0_mimage_0 (253:9)
       `-d1 (253:1)
          `- (7:0)

Example 2: mirrored mirror log

# lvcreate -m1 --corelog -l1 --addtag m testvg
  Logical volume "lvol0" created
# lvcreate -m1 -l1 --corelog testvg
  Logical volume "lvol1" created
# lvconvert --mirrorlog disk testvg/lvol1 @m
  Logical volume lvol1 converted.
# lvs -a -o name,attr,devices
  LV               Attr   Devices                            
  [lvol0]          mwi-ao lvol0_mimage_0(0),lvol0_mimage_1(0)
  [lvol0_mimage_0] iwi-ao /dev/mapper/d1(0)                  
  [lvol0_mimage_1] iwi-ao /dev/mapper/d2(0)                  
  lvol1            mwi-a- lvol1_mimage_0(0),lvol1_mimage_1(0)
  [lvol1_mimage_0] iwi-ao /dev/mapper/d3(0)                  
  [lvol1_mimage_1] iwi-ao /dev/mapper/d4(0)                  
  [lvol1_mlog]     lwi-ao lvol0(0)                      
# dmsetup ls --tree
testvg-lvol1 (253:14)
 |-testvg-lvol1_mimage_1 (253:13)
 |  `-d4 (253:4)
 |     `- (7:0)
 |-testvg-lvol1_mimage_0 (253:12)
 |  `-d3 (253:3)
 |     `- (7:0)
 `-testvg-lvol1_mlog (253:15)
    `-testvg-lvol0 (253:11)
       |-testvg-lvol0_mimage_1 (253:10)
       |  `-d2 (253:2)
       |     `- (7:0)
       `-testvg-lvol0_mimage_0 (253:9)
          `-d1 (253:1)
             `- (7:0)

Thanks,
-- 
Jun'ichi Nomura, NEC Corporation of America
-------------- next part --------------
A non-text attachment was scrubbed...
Name: lvm2-allocate-from-lv.patch
Type: text/x-patch
Size: 11167 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/lvm-devel/attachments/20071011/2b71ee7f/attachment.bin>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2007-10-11 23:03 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-11 22:30 [RFC LVM2] (0/6) Stacking LVs Jun'ichi Nomura
2007-10-11 22:54 ` [RFC LVM2] (1/6) Add 'const' to PV accessor functions Jun'ichi Nomura
2007-10-11 22:55 ` [RFC LVM2] (2/6) Add pv_dev_name() to access PV device name Jun'ichi Nomura
2007-10-11 22:56 ` [RFC LVM2] (3/6) Add _pv_allocate() (split from _pv_create) Jun'ichi Nomura
2007-10-11 22:56 ` [RFC LVM2] (4/6) Add 'pvseg' to AREA_LV lv_segment_area Jun'ichi Nomura
2007-10-11 22:57 ` [RFC LVM2] (5/6) Allow merging AREA_LV striped segments Jun'ichi Nomura
2007-10-11 23:03 ` [RFC LVM2] (6/6) Allow allocation from LV Jun'ichi Nomura

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.