The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6645

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From 9f2aef3916521e5001af7342f6e11c4d1e79d212 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 18 Dec 2019 18:17:09 -0500
Subject: [PATCH 1/4] lxd/storage/drivers: Export Name and Logger
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage/drivers/driver_common.go | 10 ++++++++++
 lxd/storage/drivers/interface.go     |  6 +++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/lxd/storage/drivers/driver_common.go 
b/lxd/storage/drivers/driver_common.go
index 5f9ce8560b..cd85e90f98 100644
--- a/lxd/storage/drivers/driver_common.go
+++ b/lxd/storage/drivers/driver_common.go
@@ -106,6 +106,16 @@ func (d *common) MigrationTypes(contentType ContentType, 
refresh bool) []migrati
        }
 }
 
+// Name returns the pool name.
+func (d *common) Name() string {
+       return d.name
+}
+
+// Logger returns the current logger.
+func (d *common) Logger() logger.Logger {
+       return d.logger
+}
+
 // Config returns the storage pool config (as a copy, so not modifiable).
 func (d *common) Config() map[string]string {
        confCopy := make(map[string]string, len(d.config))
diff --git a/lxd/storage/drivers/interface.go b/lxd/storage/drivers/interface.go
index 26209c9dc9..d05f47367d 100644
--- a/lxd/storage/drivers/interface.go
+++ b/lxd/storage/drivers/interface.go
@@ -21,10 +21,14 @@ type driver interface {
 // Driver represents a low-level storage driver.
 type Driver interface {
        // Internal.
-       Config() map[string]string
        Info() Info
        HasVolume(vol Volume) bool
 
+       // Export struct details.
+       Name() string
+       Config() map[string]string
+       Logger() logger.Logger
+
        // Pool.
        Create() error
        Delete(op *operations.Operation) error

From c2c4608c324a1509bbdd49e87580b4420b074e09 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 18 Dec 2019 16:54:01 -0500
Subject: [PATCH 2/4] lxd/storage/drivers: Introduce genericCopyVolume
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This function can be use for CopyVolume or RefreshVolume and is
structured around what was in the directory driver.

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage/drivers/driver_dir_utils.go       | 96 -------------------
 lxd/storage/drivers/driver_dir_volumes.go     |  5 +-
 .../drivers/{backups.go => generic.go}        | 84 ++++++++++++++++
 3 files changed, 87 insertions(+), 98 deletions(-)
 rename lxd/storage/drivers/{backups.go => generic.go} (51%)

diff --git a/lxd/storage/drivers/driver_dir_utils.go 
b/lxd/storage/drivers/driver_dir_utils.go
index 37471104f2..aee2a289d6 100644
--- a/lxd/storage/drivers/driver_dir_utils.go
+++ b/lxd/storage/drivers/driver_dir_utils.go
@@ -2,12 +2,8 @@ package drivers
 
 import (
        "fmt"
-       "os"
 
-       "github.com/lxc/lxd/lxd/operations"
-       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/storage/quota"
-       "github.com/lxc/lxd/shared"
        log "github.com/lxc/lxd/shared/log15"
        "github.com/lxc/lxd/shared/units"
 )
@@ -22,98 +18,6 @@ func (d *dir) withoutGetVolID() Driver {
        return newDriver
 }
 
-// copyVolume copies a volume and its specific snapshots.
-func (d *dir) copyVolume(vol Volume, srcVol Volume, srcSnapshots []Volume, op 
*operations.Operation) error {
-       if vol.contentType != ContentTypeFS || srcVol.contentType != 
ContentTypeFS {
-               return fmt.Errorf("Content type not supported")
-       }
-
-       bwlimit := d.config["rsync.bwlimit"]
-
-       // Get the volume ID for the new volumes, which is used to set project 
quota.
-       volID, err := d.getVolID(vol.volType, vol.name)
-       if err != nil {
-               return err
-       }
-
-       // Create the main volume path.
-       volPath := vol.MountPath()
-       err = vol.EnsureMountPath()
-       if err != nil {
-               return err
-       }
-
-       // Create slice of snapshots created if revert needed later.
-       revertSnaps := []string{}
-       defer func() {
-               if revertSnaps == nil {
-                       return
-               }
-
-               // Remove any paths created if we are reverting.
-               for _, snapName := range revertSnaps {
-                       fullSnapName := GetSnapshotVolumeName(vol.name, 
snapName)
-                       snapVol := NewVolume(d, d.name, vol.volType, 
vol.contentType, fullSnapName, vol.config)
-                       d.DeleteVolumeSnapshot(snapVol, op)
-               }
-
-               os.RemoveAll(volPath)
-       }()
-
-       // Ensure the volume is mounted.
-       err = vol.MountTask(func(mountPath string, op *operations.Operation) 
error {
-               // If copying snapshots is indicated, check the source isn't 
itself a snapshot.
-               if len(srcSnapshots) > 0 && !srcVol.IsSnapshot() {
-                       for _, srcSnapshot := range srcSnapshots {
-                               _, snapName, _ := 
shared.InstanceGetParentAndSnapshotName(srcSnapshot.name)
-
-                               // Mount the source snapshot.
-                               err = srcSnapshot.MountTask(func(srcMountPath 
string, op *operations.Operation) error {
-                                       // Copy the snapshot.
-                                       _, err = rsync.LocalCopy(srcMountPath, 
mountPath, bwlimit, true)
-                                       return err
-                               }, op)
-
-                               fullSnapName := GetSnapshotVolumeName(vol.name, 
snapName)
-                               snapVol := NewVolume(d, d.name, vol.volType, 
vol.contentType, fullSnapName, vol.config)
-
-                               // Create the snapshot itself.
-                               err = d.CreateVolumeSnapshot(snapVol, op)
-                               if err != nil {
-                                       return err
-                               }
-
-                               // Setup the revert.
-                               revertSnaps = append(revertSnaps, snapName)
-                       }
-               }
-
-               // Initialise the volume's quota using the volume ID.
-               err = d.initQuota(volPath, volID)
-               if err != nil {
-                       return err
-               }
-
-               // Set the quota if specified in volConfig or pool config.
-               err = d.setQuota(volPath, volID, vol.config["size"])
-               if err != nil {
-                       return err
-               }
-
-               // Copy source to destination (mounting each volume if needed).
-               return srcVol.MountTask(func(srcMountPath string, op 
*operations.Operation) error {
-                       _, err := rsync.LocalCopy(srcMountPath, mountPath, 
bwlimit, true)
-                       return err
-               }, op)
-       }, op)
-       if err != nil {
-               return err
-       }
-
-       revertSnaps = nil // Don't revert.
-       return nil
-}
-
 // setupInitialQuota enables quota on a new volume and sets with an initial 
quota from config.
 // Returns a revert function that can be used to remove the quota if there is 
a subsequent error.
 func (d *dir) setupInitialQuota(vol Volume) (func(), error) {
diff --git a/lxd/storage/drivers/driver_dir_volumes.go 
b/lxd/storage/drivers/driver_dir_volumes.go
index 19d5c8903f..d7e1e1aa1e 100644
--- a/lxd/storage/drivers/driver_dir_volumes.go
+++ b/lxd/storage/drivers/driver_dir_volumes.go
@@ -120,7 +120,8 @@ func (d *dir) CreateVolumeFromCopy(vol Volume, srcVol 
Volume, copySnapshots bool
                }
        }
 
-       return d.copyVolume(vol, srcVol, srcSnapshots, op)
+       // Run the generic copy.
+       return genericCopyVolume(d, d.setupInitialQuota, vol, srcVol, 
srcSnapshots, op)
 }
 
 // CreateVolumeFromMigration creates a volume being sent via a migration.
@@ -253,7 +254,7 @@ func (d *dir) CreateVolumeFromMigration(vol Volume, conn 
io.ReadWriteCloser, vol
 
 // RefreshVolume provides same-pool volume and specific snapshots syncing 
functionality.
 func (d *dir) RefreshVolume(vol Volume, srcVol Volume, srcSnapshots []Volume, 
op *operations.Operation) error {
-       return d.copyVolume(vol, srcVol, srcSnapshots, op)
+       return genericCopyVolume(d, d.setupInitialQuota, vol, srcVol, 
srcSnapshots, op)
 }
 
 // DeleteVolume deletes a volume of the storage device. If any snapshots of 
the volume remain then
diff --git a/lxd/storage/drivers/backups.go b/lxd/storage/drivers/generic.go
similarity index 51%
rename from lxd/storage/drivers/backups.go
rename to lxd/storage/drivers/generic.go
index 2b8fa407af..9ac19e59ad 100644
--- a/lxd/storage/drivers/backups.go
+++ b/lxd/storage/drivers/generic.go
@@ -3,11 +3,95 @@ package drivers
 import (
        "fmt"
        "io"
+       "os"
 
        "github.com/lxc/lxd/lxd/operations"
+       "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/shared"
 )
 
+// genericCopyVolume copies a volume and its snapshots using a non-optimized 
method.
+func genericCopyVolume(d Driver, applyQuota func(vol Volume) (func(), error), 
vol Volume, srcVol Volume, srcSnapshots []Volume, op *operations.Operation) 
error {
+       if vol.contentType != ContentTypeFS || srcVol.contentType != 
ContentTypeFS {
+               return fmt.Errorf("Content type not supported")
+       }
+
+       bwlimit := d.Config()["rsync.bwlimit"]
+
+       // Create the main volume path.
+       volPath := vol.MountPath()
+       err := vol.EnsureMountPath()
+       if err != nil {
+               return err
+       }
+
+       // Create slice of snapshots created if revert needed later.
+       revertSnaps := []string{}
+       defer func() {
+               if revertSnaps == nil {
+                       return
+               }
+
+               // Remove any paths created if we are reverting.
+               for _, snapName := range revertSnaps {
+                       fullSnapName := GetSnapshotVolumeName(vol.name, 
snapName)
+                       snapVol := NewVolume(d, d.Name(), vol.volType, 
vol.contentType, fullSnapName, vol.config)
+                       d.DeleteVolumeSnapshot(snapVol, op)
+               }
+
+               os.RemoveAll(volPath)
+       }()
+
+       // Ensure the volume is mounted.
+       err = vol.MountTask(func(mountPath string, op *operations.Operation) 
error {
+               // If copying snapshots is indicated, check the source isn't 
itself a snapshot.
+               if len(srcSnapshots) > 0 && !srcVol.IsSnapshot() {
+                       for _, srcSnapshot := range srcSnapshots {
+                               _, snapName, _ := 
shared.InstanceGetParentAndSnapshotName(srcSnapshot.name)
+
+                               // Mount the source snapshot.
+                               err = srcSnapshot.MountTask(func(srcMountPath 
string, op *operations.Operation) error {
+                                       // Copy the snapshot.
+                                       _, err = rsync.LocalCopy(srcMountPath, 
mountPath, bwlimit, true)
+                                       return err
+                               }, op)
+
+                               fullSnapName := GetSnapshotVolumeName(vol.name, 
snapName)
+                               snapVol := NewVolume(d, d.Name(), vol.volType, 
vol.contentType, fullSnapName, vol.config)
+
+                               // Create the snapshot itself.
+                               err = d.CreateVolumeSnapshot(snapVol, op)
+                               if err != nil {
+                                       return err
+                               }
+
+                               // Setup the revert.
+                               revertSnaps = append(revertSnaps, snapName)
+                       }
+               }
+
+               // Apply some quotas if needed.
+               if applyQuota != nil {
+                       _, err := applyQuota(vol)
+                       if err != nil {
+                               return err
+                       }
+               }
+
+               // Copy source to destination (mounting each volume if needed).
+               return srcVol.MountTask(func(srcMountPath string, op 
*operations.Operation) error {
+                       _, err := rsync.LocalCopy(srcMountPath, mountPath, 
bwlimit, true)
+                       return err
+               }, op)
+       }, op)
+       if err != nil {
+               return err
+       }
+
+       revertSnaps = nil // Don't revert.
+       return nil
+}
+
 // genericBackupUnpack unpacks a non-optimized backup tarball through a 
storage driver.
 func genericBackupUnpack(d Driver, poolName string, vol Volume, snapshots 
[]string, srcData io.ReadSeeker, op *operations.Operation) (func(vol Volume) 
error, func(), error) {
        revert := true

From 089047f22e8f694ca7c504d8f7f4867c5ec757cb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 18 Dec 2019 18:17:53 -0500
Subject: [PATCH 3/4] lxd/storage/drivers: Introduce
 genericCreateVolumeFromMigration
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage/drivers/driver_dir_volumes.go | 119 +---------------------
 lxd/storage/drivers/generic.go            | 104 +++++++++++++++++++
 2 files changed, 105 insertions(+), 118 deletions(-)

diff --git a/lxd/storage/drivers/driver_dir_volumes.go 
b/lxd/storage/drivers/driver_dir_volumes.go
index d7e1e1aa1e..5203d156a2 100644
--- a/lxd/storage/drivers/driver_dir_volumes.go
+++ b/lxd/storage/drivers/driver_dir_volumes.go
@@ -11,8 +11,6 @@ import (
        "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/lxd/storage/quota"
        "github.com/lxc/lxd/shared"
-       "github.com/lxc/lxd/shared/ioprogress"
-       log "github.com/lxc/lxd/shared/log15"
 )
 
 // CreateVolume creates an empty volume and can optionally fill it by 
executing the supplied
@@ -134,122 +132,7 @@ func (d *dir) CreateVolumeFromMigration(vol Volume, conn 
io.ReadWriteCloser, vol
                return fmt.Errorf("Migration type not supported")
        }
 
-       // Get the volume ID for the new volumes, which is used to set project 
quota.
-       volID, err := d.getVolID(vol.volType, vol.name)
-       if err != nil {
-               return err
-       }
-
-       // Create the main volume path.
-       volPath := vol.MountPath()
-       err = vol.EnsureMountPath()
-       if err != nil {
-               return err
-       }
-
-       // Create slice of snapshots created if revert needed later.
-       revertSnaps := []string{}
-       defer func() {
-               if revertSnaps == nil {
-                       return
-               }
-
-               // Remove any paths created if we are reverting.
-               for _, snapName := range revertSnaps {
-                       fullSnapName := GetSnapshotVolumeName(vol.name, 
snapName)
-                       snapVol := NewVolume(d, d.name, vol.volType, 
vol.contentType, fullSnapName, vol.config)
-                       d.DeleteVolumeSnapshot(snapVol, op)
-               }
-
-               os.RemoveAll(volPath)
-       }()
-
-       // Ensure the volume is mounted.
-       err = vol.MountTask(func(mountPath string, op *operations.Operation) 
error {
-               path := shared.AddSlash(mountPath)
-
-               // Run the volume pre-filler function if supplied.
-               if preFiller != nil && preFiller.Fill != nil {
-                       d.logger.Debug("Running pre-filler function", 
log.Ctx{"volume": vol.name, "path": path})
-                       err = preFiller.Fill(path, "")
-                       if err != nil {
-                               return err
-                       }
-                       d.logger.Debug("Finished pre-filler function", 
log.Ctx{"volume": vol.name})
-               }
-
-               // Snapshots are sent first by the sender, so create these 
first.
-               for _, snapName := range volTargetArgs.Snapshots {
-                       // Receive the snapshot
-                       var wrapper *ioprogress.ProgressTracker
-                       if volTargetArgs.TrackProgress {
-                               wrapper = migration.ProgressTracker(op, 
"fs_progress", snapName)
-                       }
-
-                       d.logger.Debug("Receiving volume", log.Ctx{"volume": 
vol.name, "snapshot": snapName, "path": path})
-                       err = rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
-                       if err != nil {
-                               return err
-                       }
-
-                       // Create the snapshot itself.
-                       fullSnapshotName := GetSnapshotVolumeName(vol.name, 
snapName)
-                       snapVol := NewVolume(d, d.name, vol.volType, 
vol.contentType, fullSnapshotName, vol.config)
-
-                       err = d.CreateVolumeSnapshot(snapVol, op)
-                       if err != nil {
-                               return err
-                       }
-
-                       // Setup the revert.
-                       revertSnaps = append(revertSnaps, snapName)
-               }
-
-               // Initialise the volume's quota using the volume ID.
-               err = d.initQuota(volPath, volID)
-               if err != nil {
-                       return err
-               }
-
-               // Set the quota if specified in volConfig or pool config.
-               err = d.setQuota(volPath, volID, vol.config["size"])
-               if err != nil {
-                       return err
-               }
-
-               // Receive the main volume from sender.
-               var wrapper *ioprogress.ProgressTracker
-               if volTargetArgs.TrackProgress {
-                       wrapper = migration.ProgressTracker(op, "fs_progress", 
vol.name)
-               }
-
-               d.logger.Debug("Receiving volume", log.Ctx{"volume": vol.name, 
"path": path})
-               err = rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
-               if err != nil {
-                       return err
-               }
-
-               // Receive the final main volume sync if needed.
-               if volTargetArgs.Live {
-                       if volTargetArgs.TrackProgress {
-                               wrapper = migration.ProgressTracker(op, 
"fs_progress", vol.name)
-                       }
-
-                       d.logger.Debug("Receiving volume (final stage)", 
log.Ctx{"vol": vol.name, "path": path})
-                       err = rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
-                       if err != nil {
-                               return err
-                       }
-               }
-
-               return nil
-       }, op)
-       if err != nil {
-               return err
-       }
-
-       revertSnaps = nil
-       return nil
+       return genericCreateVolumeFromMigration(d, d.setupInitialQuota, vol, 
conn, volTargetArgs, preFiller, op)
 }
 
 // RefreshVolume provides same-pool volume and specific snapshots syncing 
functionality.
diff --git a/lxd/storage/drivers/generic.go b/lxd/storage/drivers/generic.go
index 9ac19e59ad..129763f68b 100644
--- a/lxd/storage/drivers/generic.go
+++ b/lxd/storage/drivers/generic.go
@@ -5,9 +5,12 @@ import (
        "io"
        "os"
 
+       "github.com/lxc/lxd/lxd/migration"
        "github.com/lxc/lxd/lxd/operations"
        "github.com/lxc/lxd/lxd/rsync"
        "github.com/lxc/lxd/shared"
+       "github.com/lxc/lxd/shared/ioprogress"
+       log "github.com/lxc/lxd/shared/log15"
 )
 
 // genericCopyVolume copies a volume and its snapshots using a non-optimized 
method.
@@ -92,6 +95,107 @@ func genericCopyVolume(d Driver, applyQuota func(vol 
Volume) (func(), error), vo
        return nil
 }
 
+// genericCreateVolumeFromMigration receives a volume and its snapshots over a 
non-optimized method.
+func genericCreateVolumeFromMigration(d Driver, applyQuota func(vol Volume) 
(func(), error), vol Volume, conn io.ReadWriteCloser, volTargetArgs 
migration.VolumeTargetArgs, preFiller *VolumeFiller, op *operations.Operation) 
error {
+       // Create the main volume path.
+       if !volTargetArgs.Refresh {
+               err := d.CreateVolume(vol, preFiller, op)
+               if err != nil {
+                       return err
+               }
+       }
+
+       // Create slice of snapshots created if revert needed later.
+       revertSnaps := []string{}
+       defer func() {
+               if revertSnaps == nil {
+                       return
+               }
+
+               // Remove any paths created if we are reverting.
+               for _, snapName := range revertSnaps {
+                       fullSnapName := GetSnapshotVolumeName(vol.Name(), 
snapName)
+                       snapVol := NewVolume(d, d.Name(), vol.volType, 
vol.contentType, fullSnapName, vol.config)
+                       d.DeleteVolumeSnapshot(snapVol, op)
+               }
+
+               d.DeleteVolume(vol, op)
+       }()
+
+       // Ensure the volume is mounted.
+       err := vol.MountTask(func(mountPath string, op *operations.Operation) 
error {
+               path := shared.AddSlash(mountPath)
+
+               // Snapshots are sent first by the sender, so create these 
first.
+               for _, snapName := range volTargetArgs.Snapshots {
+                       // Receive the snapshot
+                       var wrapper *ioprogress.ProgressTracker
+                       if volTargetArgs.TrackProgress {
+                               wrapper = migration.ProgressTracker(op, 
"fs_progress", snapName)
+                       }
+
+                       d.Logger().Debug("Receiving volume", log.Ctx{"volume": 
vol.name, "snapshot": snapName, "path": path})
+                       err := rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
+                       if err != nil {
+                               return err
+                       }
+
+                       // Create the snapshot itself.
+                       fullSnapshotName := GetSnapshotVolumeName(vol.name, 
snapName)
+                       snapVol := NewVolume(d, d.Name(), vol.volType, 
vol.contentType, fullSnapshotName, vol.config)
+
+                       err = d.CreateVolumeSnapshot(snapVol, op)
+                       if err != nil {
+                               return err
+                       }
+
+                       // Setup the revert.
+                       revertSnaps = append(revertSnaps, snapName)
+               }
+
+               // Apply quotas.
+               if applyQuota != nil {
+                       _, err := applyQuota(vol)
+                       if err != nil {
+                               return err
+                       }
+               }
+
+               // Receive the main volume from sender.
+               var wrapper *ioprogress.ProgressTracker
+               if volTargetArgs.TrackProgress {
+                       wrapper = migration.ProgressTracker(op, "fs_progress", 
vol.name)
+               }
+
+               d.Logger().Debug("Receiving volume", log.Ctx{"volume": 
vol.name, "path": path})
+               err := rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
+               if err != nil {
+                       return err
+               }
+
+               // Receive the final main volume sync if needed.
+               if volTargetArgs.Live {
+                       if volTargetArgs.TrackProgress {
+                               wrapper = migration.ProgressTracker(op, 
"fs_progress", vol.name)
+                       }
+
+                       d.Logger().Debug("Receiving volume (final stage)", 
log.Ctx{"vol": vol.name, "path": path})
+                       err = rsync.Recv(path, conn, wrapper, 
volTargetArgs.MigrationType.Features)
+                       if err != nil {
+                               return err
+                       }
+               }
+
+               return nil
+       }, op)
+       if err != nil {
+               return err
+       }
+
+       revertSnaps = nil
+       return nil
+}
+
 // genericBackupUnpack unpacks a non-optimized backup tarball through a 
storage driver.
 func genericBackupUnpack(d Driver, poolName string, vol Volume, snapshots 
[]string, srcData io.ReadSeeker, op *operations.Operation) (func(vol Volume) 
error, func(), error) {
        revert := true

From 394c49cfc45dbc115386a4a781029236f2db6e92 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Wed, 18 Dec 2019 18:23:20 -0500
Subject: [PATCH 4/4] lxd/storage/drivers: Simplify genericBackupUnpack
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/storage/drivers/driver_dir_volumes.go | 2 +-
 lxd/storage/drivers/generic.go            | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lxd/storage/drivers/driver_dir_volumes.go 
b/lxd/storage/drivers/driver_dir_volumes.go
index 5203d156a2..bda0866ef1 100644
--- a/lxd/storage/drivers/driver_dir_volumes.go
+++ b/lxd/storage/drivers/driver_dir_volumes.go
@@ -79,7 +79,7 @@ func (d *dir) CreateVolume(vol Volume, filler *VolumeFiller, 
op *operations.Oper
 // CreateVolumeFromBackup restores a backup tarball onto the storage device.
 func (d *dir) CreateVolumeFromBackup(vol Volume, snapshots []string, srcData 
io.ReadSeeker, optimizedStorage bool, op *operations.Operation) (func(vol 
Volume) error, func(), error) {
        // Run the generic backup unpacker
-       postHook, revertHook, err := genericBackupUnpack(d.withoutGetVolID(), 
d.name, vol, snapshots, srcData, op)
+       postHook, revertHook, err := genericBackupUnpack(d.withoutGetVolID(), 
vol, snapshots, srcData, op)
        if err != nil {
                return nil, nil, err
        }
diff --git a/lxd/storage/drivers/generic.go b/lxd/storage/drivers/generic.go
index 129763f68b..5102677e90 100644
--- a/lxd/storage/drivers/generic.go
+++ b/lxd/storage/drivers/generic.go
@@ -197,7 +197,7 @@ func genericCreateVolumeFromMigration(d Driver, applyQuota 
func(vol Volume) (fun
 }
 
 // genericBackupUnpack unpacks a non-optimized backup tarball through a 
storage driver.
-func genericBackupUnpack(d Driver, poolName string, vol Volume, snapshots 
[]string, srcData io.ReadSeeker, op *operations.Operation) (func(vol Volume) 
error, func(), error) {
+func genericBackupUnpack(d Driver, vol Volume, snapshots []string, srcData 
io.ReadSeeker, op *operations.Operation) (func(vol Volume) error, func(), 
error) {
        revert := true
 
        // Define a revert function that will be used both to revert if an 
error occurs inside this
@@ -205,7 +205,7 @@ func genericBackupUnpack(d Driver, poolName string, vol 
Volume, snapshots []stri
        revertHook := func() {
                for _, snapName := range snapshots {
                        fullSnapshotName := GetSnapshotVolumeName(vol.name, 
snapName)
-                       snapVol := NewVolume(d, poolName, vol.volType, 
vol.contentType, fullSnapshotName, vol.config)
+                       snapVol := NewVolume(d, d.Name(), vol.volType, 
vol.contentType, fullSnapshotName, vol.config)
                        d.DeleteVolumeSnapshot(snapVol, op)
                }
 
@@ -235,7 +235,7 @@ func genericBackupUnpack(d Driver, poolName string, vol 
Volume, snapshots []stri
 
        if len(snapshots) > 0 {
                // Create new snapshots directory.
-               err := createParentSnapshotDirIfMissing(poolName, vol.volType, 
vol.name)
+               err := createParentSnapshotDirIfMissing(d.Name(), vol.volType, 
vol.name)
                if err != nil {
                        return nil, nil, err
                }
@@ -259,7 +259,7 @@ func genericBackupUnpack(d Driver, poolName string, vol 
Volume, snapshots []stri
                }
 
                fullSnapshotName := GetSnapshotVolumeName(vol.name, snapName)
-               snapVol := NewVolume(d, poolName, vol.volType, vol.contentType, 
fullSnapshotName, vol.config)
+               snapVol := NewVolume(d, d.Name(), vol.volType, vol.contentType, 
fullSnapshotName, vol.config)
                err = d.CreateVolumeSnapshot(snapVol, op)
                if err != nil {
                        return nil, nil, err
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to