[libvirt] [PATCH v2 3/6] logical: Search for a segtype of "thin" and mark lv as sparse

John Ferlan jferlan at redhat.com
Mon Feb 1 13:26:30 UTC 2016



On 02/01/2016 07:09 AM, Pavel Hrdina wrote:
> On Thu, Jan 28, 2016 at 05:44:06PM -0500, John Ferlan wrote:
>> For any "thin" lv's, mark the volume as a sparse volume so that the
>> volume wipe algorithm doesn't work.  Currently thin lv's are ignored
>> because the regex requires 1 or more 'devices' listed in order to
>> process. However, a future patch will be changing this.
>>
>> Signed-off-by: John Ferlan <jferlan at redhat.com>
>> ---
>>  src/storage/storage_backend_logical.c | 9 +++++++--
>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/storage/storage_backend_logical.c b/src/storage/storage_backend_logical.c
>> index 3232c08..a9c6309 100644
>> --- a/src/storage/storage_backend_logical.c
>> +++ b/src/storage/storage_backend_logical.c
>> @@ -64,6 +64,8 @@ virStorageBackendLogicalSetActive(virStoragePoolObjPtr pool,
>>  }
>>  
>>  
>> +#define VIR_STORAGE_VOL_LOGICAL_SEGTYPE_THIN "thin"
>> +
>>  struct virStorageBackendLogicalPoolVolData {
>>      virStoragePoolObjPtr pool;
>>      virStorageVolDefPtr vol;
>> @@ -201,12 +203,15 @@ virStorageBackendLogicalMakeVol(char **const groups,
>>      }
>>  
>>      /* Mark the (s) sparse/snapshot lv, e.g. the lv created using
>> -     * the --virtualsize/-V option. We've already ignored the (t)hin
>> +     * the --virtualsize/-V option or a thin segtype as sparse. This
>> +     * will make sure the volume wipe algorithm doesn't overwrite
>> +     * a sparse/thin volumes. We've already ignored the (t)hin
>>       * pool definition. In the manner libvirt defines these, the
>>       * thin pool is hidden to the lvs output, except as the name
>>       * in brackets [] described for the groups[1] (backingStore).
>>       */
>> -    if (attrs[0] == 's')
>> +    if (attrs[0] == 's' ||
>> +        STREQ(groups[4], VIR_STORAGE_VOL_LOGICAL_SEGTYPE_THIN))
>>          vol->target.sparse = true;
> 
> Well, I'm not sure about this code.  Based on my research, the 's' means
> snapshot volume and there is another flag 'V' which is thin volume.  The comment
> doesn't seems to be correct.  By using --virtualsize/-V it will create snapshot
> or thin volume based on 'sparse_segtype_default' configuration option from
> /etc/lvm/lvm.conf.  It would be nice to clarify this in the comment for future
> review.  One more thing, why don't use || attrs[0] == 'V' ?

Yes, 's' is a 'thin snapshot volume', which is different than a 'thin
volume in a thin pool'.

The '-V'/'--virtualsize' are command line options to lvcreate to
generate a sparse volume. Because 'thin pools' became the default at
some point in time the libvirt code added a "--type snapshot" to the
command line to indicate we wanted what we had been using.

Check out commit id 'cafb934d' for some history as well as the details
left when I tried to add code to handle 'thin volume as part of a
thin_pool':

http://www.redhat.com/archives/libvir-list/2014-December/msg00706.html

Usage of attrs[0] == 'V' and comparing the segname to "thin" are the
same.  Without the groups[4] search here though, then 'segname' is
unused and could be removed.  Doesn't matter either way to me. Just
seemed more practical to use groups[4] (e.g. segtype) just in case we
needed it in the future.

John




More information about the libvir-list mailing list