[libvirt] [PATCH v2 2/2] storage: btrfs subvolumes for directory pools
Oskari Saarenmaa
os at ohmu.fi
Thu Oct 10 16:39:40 UTC 2013
Thanks for the review,
10.10.2013 18:57, Daniel P. Berrange kirjoitti:
> On Thu, Oct 10, 2013 at 05:52:22PM +0300, Oskari Saarenmaa wrote:
>> +if test "$with_storage_btrfs" = "yes" || test "$with_storage_btrfs" = "check"; then
>> + AC_PATH_PROG([BTRFS], [btrfs], [], [$PATH:/sbin:/usr/sbin])
[...]
>> +AM_CONDITIONAL([WITH_STORAGE_BTRFS], [test "$with_storage_btrfs" = "yes"])
>
> Just use 'WITH_BTRFS' here - the WITH_STORAGE_XXXX is for actual
> storage backends.
Do we actually need a flag for enabling / disabling btrfs usage as it's
not a separate storage pool? I'm thinking about just calling
AC_PATH_PROG(btrfs) if FS pool is enabled, and using #ifdef BTRFS in the
fs code to use btrfs if available.
>> --- a/src/conf/storage_conf.h
>> +++ b/src/conf/storage_conf.h
>> @@ -90,6 +90,7 @@ struct _virStorageVolTarget {
>> virStorageEncryptionPtr encryption;
>> virBitmapPtr features;
>> char *compat;
>> + char *uuid;
>> };
>
> This struct represents the public XML data format - adding random fields
> to it for individual driver use is not allowed.
Ok, I'll put this thing somewhere else.
>> + if (volv->backingStore.path == NULL) {
>> + /* backing store not in the pool, ignore it */
>
> Backing stores for volumes are not required to be in the same pool as
> the source. For example it is valid to have a qcow2 file backed by
> a lvm volume.
In btrfs's case the note about backing store in an existing subvolume is
informational only; all subvolumes, snapshots or not, are independent
and in case we can't find a symbolic name for the parent volume I think
it's safe to just ignore it. I'll add this note to the comment.
> I'm thinking it would be nice to have a dedicate file with APIs for btrfs
> eg src/util/virbtrfs.{h,c} and have it contain things like
>
> virBtrFSCreateVolume(....)
> virBtrFSCreateVolume(....)
> virBtrFS...(....)
>
> and so on, so we don't have all these virCommand calls littering this
> file.
I'm not sure it makes sense to do this until there's another user for
btrfs commands in libvirt, but I can do it if you like. I think it'd be
more useful to have a module which implements copy-on-write operations
for different filesystems (btrfs, zfs, something else?) with a common api.
>> diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
>> index d5effa4..4dc6c81 100644
>> --- a/src/util/virstoragefile.h
>> +++ b/src/util/virstoragefile.h
>> @@ -46,6 +46,7 @@ enum virStorageFileFormat {
>> VIR_STORAGE_FILE_FAT,
>> VIR_STORAGE_FILE_VHD,
>> VIR_STORAGE_FILE_VDI,
>> + VIR_STORAGE_FILE_VOLUME,
>
> This isn't right - volumes already have a type={file,block,dir,volume}
> and we shouldn't duplicate this in the format attribute too.
Hmm.. I don't see such a field in virStorageVolType - am I looking at a
wrong enum?
>> diff --git a/tests/storagevolxml2xmlin/vol-btrfs-snapshot.xml b/tests/storagevolxml2xmlin/vol-btrfs-snapshot.xml
>> new file mode 100644
>> index 0000000..5a58b56
>> --- /dev/null
>> +++ b/tests/storagevolxml2xmlin/vol-btrfs-snapshot.xml
>> @@ -0,0 +1,13 @@
>> +<volume>
>> + <name>clone</name>
>> + <capacity unit="bytes">0</capacity>
>> + <allocation unit="bytes">0</allocation>
>> + <target>
>> + <path>/lxc/clone</path>
>> + <format type='volume'/>
>> + </target>
>> + <backingStore>
>> + <path>/lxc/vanilla</path>
>> + <format type='volume'/>
>> + </backingStore>
>> +</volume>
>
> Using 'format' in this way is wrong. What we should be doing
> is exposing the volume 'type' as an attribute eg
>
> <volume type='volume'>
> ...
> </volume>
I suppose that makes sense, but it would make this incompatible with
existing volume creation. Right now (with the current patch) I can use
existing virsh tooling to run, for example 'virsh vol-create-as default
guest-1 0 --format volume --backing-store guest-base'
>> diff --git a/tests/storagevolxml2xmlout/vol-btrfs-snapshot.xml b/tests/storagevolxml2xmlout/vol-btrfs-snapshot.xml
>> new file mode 100644
>> index 0000000..75830d3
>> --- /dev/null
>> +++ b/tests/storagevolxml2xmlout/vol-btrfs-snapshot.xml
>> @@ -0,0 +1,26 @@
>> +<volume>
>> + <name>clone</name>
>> + <key>(null)</key>
>
> If you're getting (null) here, then something has gone wrong
I'll look into this.
Thanks,
Oskari
More information about the libvir-list
mailing list