---
 PVE/Storage/LVMPlugin.pm     | 11 ++++++++---
 PVE/Storage/LvmThinPlugin.pm | 15 +++++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/PVE/Storage/LVMPlugin.pm b/PVE/Storage/LVMPlugin.pm
index 9633e4c..ed8afa1 100644
--- a/PVE/Storage/LVMPlugin.pm
+++ b/PVE/Storage/LVMPlugin.pm
@@ -509,15 +509,14 @@ sub volume_export_formats {
     return volume_import_formats($class, $scfg, $storeid, $volname, 
$base_snapshot, $with_snapshots);
 }
 
-sub volume_export {
+sub __volume_export {
     my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, 
$base_snapshot, $with_snapshots) = @_;
     die "volume export format $format not available for $class\n"
        if $format ne 'raw+size';
     die "cannot export volumes together with their snapshots in $class\n"
        if $with_snapshots;
-    die "cannot export a snapshot in $class\n" if defined($snapshot);
     die "cannot export an incremental stream in $class\n" if 
defined($base_snapshot);
-    my $file = $class->path($scfg, $volname, $storeid);
+    my $file = $class->path($scfg, $volname, $storeid, $snapshot);
     my $size;
     # should be faster than querying LVM, also checks for the device file's 
availability
     run_command(['/sbin/blockdev', '--getsize64', $file], outfunc => sub {
@@ -529,6 +528,12 @@ sub volume_export {
     run_command(['dd', "if=$file", "bs=64k"], output => '>&'.fileno($fh));
 }
 
+sub volume_export {
+    my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, 
$base_snapshot, $with_snapshots) = @_;
+    die "cannot export a snapshot in $class\n" if defined($snapshot);
+    __volume_export($class, $scfg, $storeid, $fh, $volname, $format, 
$snapshot, $base_snapshot, $with_snapshots);
+}
+
 sub volume_import_formats {
     my ($class, $scfg, $storeid, $volname, $base_snapshot, $with_snapshots) = 
@_;
     return () if $with_snapshots; # not supported
diff --git a/PVE/Storage/LvmThinPlugin.pm b/PVE/Storage/LvmThinPlugin.pm
index ccf5b7b..3c55db4 100644
--- a/PVE/Storage/LvmThinPlugin.pm
+++ b/PVE/Storage/LvmThinPlugin.pm
@@ -368,4 +368,19 @@ sub volume_has_feature {
     return undef;
 }
 
+sub volume_export_formats {
+    my ($class, $scfg, $storeid, $volname, $snapshot, $base_snapshot, 
$with_snapshots) = @_;
+    # The difference to LVM-non-thin is that we *can* export snapshots
+    return $class->SUPER($class, $scfg, $storeid, $volname, $base_snapshot, 
$with_snapshots);
+}
+
+sub volume_export {
+    my ($class, $scfg, $storeid, $fh, $volname, $format, $snapshot, 
$base_snapshot, $with_snapshots) = @_;
+    # LVMPlugin checks the $snapshot parameter here, we don't.
+    # But we need to activate them:
+    $class->activate_volume($storeid, $scfg, $volname, $snapshot) if 
defined($snapshot);
+    PVE::Storage::LVMPlugin::__volume_export($class, $scfg, $storeid, $fh, 
$volname, $format, $snapshot, $base_snapshot, $with_snapshots);
+    $class->deactivate_volume($storeid, $scfg, $volname, $snapshot) if 
defined($snapshot);
+}
+
 1;
-- 
2.11.0


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to