[libvirt] [PATCH] storage: Do not use comma as seperator for lvs output

Eli taget at linux.vnet.ibm.com
Thu Sep 22 06:31:24 UTC 2011


hi Osier :
于 2011年09月21日 17:07, Osier Yang 写道:
> * src/storage/storage_backend_logical.c:
>
> If a logical vol is created with multiple stripes. (e.g. --stripes 3),
> the "device" field of lvs output will have multiple fileds which are
> seperated by comma. It means the RE we write in the codes will not
> work well anymore. E.g. (lvs output for a stripped vol, uses "#" as
> seperator here):
>
> test_stripes##fSLSZH-zAS2-yAIb-n4mV-Al9u-HA3V-oo9K1B#\
> /dev/sdc1(10240),/dev/sdd1(0)#42949672960#4194304
>
> The RE we uses:
>
>      const char *regexes[] = {
>          "^\\s*(\\S+),(\\S*),(\\S+),(\\S+)\\((\\S+)\\),(\\S+),([0-9]+),?\\s*$"
>      };
>
> This patch changes the seperator into "#" to fix the problem.
>
> Related RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=727474
> ---
>   src/storage/storage_backend_logical.c |    7 ++++---
>   1 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
> index 4f42047..45f77ad 100644
> --- a/src/storage/storage_backend_logical.c
> +++ b/src/storage/storage_backend_logical.c
> @@ -187,19 +187,20 @@ virStorageBackendLogicalFindLVs(virStoragePoolObjPtr pool,
>        *
>        * NB can be multiple rows per volume if they have many extents
>        *
> -     * NB lvs from some distros (e.g. SLES10 SP2) outputs trailing "," on each line
> +     * NB lvs from some distros (e.g. SLES10 SP2) outputs trailing
> +     * @separator on each line
>        *
>        * NB Encrypted logical volumes can print ':' in their name, so it is
>        *    not a suitable separator (rhbz 470693).
>        */
>       const char *regexes[] = {
> -        "^\\s*(\\S+),(\\S*),(\\S+),(\\S+)\\((\\S+)\\),(\\S+),([0-9]+),?\\s*$"
> +        "^\\s*(\\S+)#(\\S*)#(\\S+)#(\\S+)\\((\\S+)\\)#(\\S+)#([0-9]+)#?\\s*$"
>       };
>       int vars[] = {
>           7
>       };
>       const char *prog[] = {
> -        LVS, "--separator", ",", "--noheadings", "--units", "b",
> +        LVS, "--separator", "#", "--noheadings", "--units", "b",
>           "--unbuffered", "--nosuffix", "--options",
>           "lv_name,origin,uuid,devices,seg_size,vg_extent_size",
>           pool->def->source.name, NULL

I reproduced the bug :

[root at localhost bin]# ./virsh -d 5 pool-create-as vg_ssd logical 
--target /dev/vg_ssd
error: Failed to create pool vg_ssd
error: cannot open volume '/dev/vg_ssd/test_stripes,': No such file or 
directory

and then I tested this patch , it seems work well.

[root at localhost bin]# ./virsh -d 5 pool-create-as vg_ssd logical 
--target /dev/vg_ssd
Pool vg_ssd created

[root at localhost bin]# ./virsh pool-info vg_ssd
Name: vg_ssd
UUID: c45cc84e-7879-cc15-ee78-2d2dda6b531d
State: running
Persistent: no
Autostart: no
Capacity: 200.00 MB
Allocation: 152.00 MB
Available: 48.00 MB




More information about the libvir-list mailing list