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

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 574fcef04e767595bdd647a168c60b9127b2bf84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 7 Dec 2019 20:35:27 -0500
Subject: [PATCH 1/8] tests: Remove pointless loop/check
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 test/suites/storage_local_volume_handling.sh | 75 ++++++++++----------
 1 file changed, 36 insertions(+), 39 deletions(-)

diff --git a/test/suites/storage_local_volume_handling.sh 
b/test/suites/storage_local_volume_handling.sh
index 12cf50a186..fa5805f9c6 100644
--- a/test/suites/storage_local_volume_handling.sh
+++ b/test/suites/storage_local_volume_handling.sh
@@ -49,50 +49,47 @@ test_storage_local_volume_handling() {
     #  zfs   |   x   |   x   |   x   |   x   |   x   |
     # -------|-------|-------|-------|-------|-------|
 
-    for driver in "btrfs" "ceph" "dir" "lvm" "zfs"; do
-      if [ "$lxd_backend" = "$driver" ]; then
-        pool_opts=
+    driver="${lxd_backend}"
+    pool_opts=
 
-        if [ "$driver" = "btrfs" ] || [ "$driver" = "zfs" ]; then
-          pool_opts="size=100GB"
-        fi
+    if [ "$driver" = "btrfs" ] || [ "$driver" = "zfs" ]; then
+      pool_opts="size=100GB"
+    fi
 
-        if [ "$driver" = "ceph" ]; then
-          pool_opts="volume.size=25MB ceph.osd.pg_num=1"
-        fi
+    if [ "$driver" = "ceph" ]; then
+      pool_opts="volume.size=25MB ceph.osd.pg_num=1"
+    fi
 
-        if [ "$driver" = "lvm" ]; then
-          pool_opts="volume.size=25MB"
-        fi
+    if [ "$driver" = "lvm" ]; then
+      pool_opts="volume.size=25MB"
+    fi
 
-        if [ -n "${pool_opts}" ]; then
-          # shellcheck disable=SC2086
-          lxc storage create "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
"${driver}" $pool_opts
-        else
-          lxc storage create "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
"${driver}"
-        fi
+    if [ -n "${pool_opts}" ]; then
+      # shellcheck disable=SC2086
+      lxc storage create "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
"${driver}" $pool_opts
+    else
+      lxc storage create "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
"${driver}"
+    fi
 
-        lxc storage volume create "lxdtest-$(basename "${LXD_DIR}")-${driver}" 
vol1
-        # This will create the snapshot vol1/snap0
-        lxc storage volume snapshot "lxdtest-$(basename 
"${LXD_DIR}")-${driver}" vol1
-        # Copy volume with snapshots
-        lxc storage volume copy "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1" "lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol1"
-        # Ensure the target snapshot is there
-        lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1/snap0
-        # Copy volume only
-        lxc storage volume copy --volume-only "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1" "lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol2"
-        # Copy snapshot to volume
-        lxc storage volume copy "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1/snap0" "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1/vol3"
-        lxc storage volume delete "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1" vol1
-        lxc storage volume delete "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1" vol2
-        lxc storage volume delete "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1" vol3
-        lxc storage volume move "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1" "lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol1"
-        ! lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}" 
vol1 || false
-        lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1
-        lxc storage volume delete "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1" vol1
-        lxc storage delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1"
-      fi
-    done
+    lxc storage volume create "lxdtest-$(basename "${LXD_DIR}")-${driver}" vol1
+    # This will create the snapshot vol1/snap0
+    lxc storage volume snapshot "lxdtest-$(basename "${LXD_DIR}")-${driver}" 
vol1
+    # Copy volume with snapshots
+    lxc storage volume copy "lxdtest-$(basename "${LXD_DIR}")-${driver}/vol1" 
"lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol1"
+    # Ensure the target snapshot is there
+    lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1/snap0
+    # Copy volume only
+    lxc storage volume copy --volume-only "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1" "lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol2"
+    # Copy snapshot to volume
+    lxc storage volume copy "lxdtest-$(basename 
"${LXD_DIR}")-${driver}/vol1/snap0" "lxdtest-$(basename 
"${LXD_DIR}")-${driver}1/vol3"
+    lxc storage volume delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1
+    lxc storage volume delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol2
+    lxc storage volume delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol3
+    lxc storage volume move "lxdtest-$(basename "${LXD_DIR}")-${driver}/vol1" 
"lxdtest-$(basename "${LXD_DIR}")-${driver}1/vol1"
+    ! lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}" 
vol1 || false
+    lxc storage volume show "lxdtest-$(basename "${LXD_DIR}")-${driver}1" vol1
+    lxc storage volume delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1
+    lxc storage delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1"
 
     for source_driver in "btrfs" "ceph" "dir" "lvm" "zfs"; do
       for target_driver in "btrfs" "ceph" "dir" "lvm" "zfs"; do

From bb3b5de86c6bf4323b3fac134848c5ac1c68f8db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 7 Dec 2019 21:55:24 -0500
Subject: [PATCH 2/8] tests: Test copy on cephfs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 test/suites/storage_local_volume_handling.sh | 19 +++----------------
 1 file changed, 3 insertions(+), 16 deletions(-)

diff --git a/test/suites/storage_local_volume_handling.sh 
b/test/suites/storage_local_volume_handling.sh
index fa5805f9c6..b5d861e7df 100644
--- a/test/suites/storage_local_volume_handling.sh
+++ b/test/suites/storage_local_volume_handling.sh
@@ -34,20 +34,7 @@ test_storage_local_volume_handling() {
       lxc storage create "lxdtest-$(basename "${LXD_DIR}")-zfs" zfs size=100GB
     fi
 
-    # This looks complex but is basically just the following test matrix:
-    #
-    #        | btrfs |  ceph |  dir  |  lvm  |  zfs  |
-    # -------|-------|-------|-------|-------|-------|
-    #  btrfs |   x   |   x   |   x   |   x   |   x   |
-    # -------|-------|-------|-------|-------|-------|
-    #  ceph  |   x   |   x   |   x   |   x   |   x   |
-    # -------|-------|-------|-------|-------|-------|
-    #  dir   |   x   |   x   |   x   |   x   |   x   |
-    # -------|-------|-------|-------|-------|-------|
-    #  lvm   |   x   |   x   |   x   |   x   |   x   |
-    # -------|-------|-------|-------|-------|-------|
-    #  zfs   |   x   |   x   |   x   |   x   |   x   |
-    # -------|-------|-------|-------|-------|-------|
+    # Test all combinations of our storage drivers
 
     driver="${lxd_backend}"
     pool_opts=
@@ -91,8 +78,8 @@ test_storage_local_volume_handling() {
     lxc storage volume delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1" 
vol1
     lxc storage delete "lxdtest-$(basename "${LXD_DIR}")-${driver}1"
 
-    for source_driver in "btrfs" "ceph" "dir" "lvm" "zfs"; do
-      for target_driver in "btrfs" "ceph" "dir" "lvm" "zfs"; do
+    for source_driver in "btrfs" "ceph" "cephfs" "dir" "lvm" "zfs"; do
+      for target_driver in "btrfs" "ceph" "cephfs" "dir" "lvm" "zfs"; do
         if [ "$source_driver" != "$target_driver" ] && [ "$lxd_backend" = 
"$source_driver" ] && storage_backend_available "$target_driver"; then
           # source_driver -> target_driver
           lxc storage volume create "lxdtest-$(basename 
"${LXD_DIR}")-${source_driver}" vol1

From 061126ef15867564ac825a6a027ddecf3db279cd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Fri, 6 Dec 2019 00:11:31 -0500
Subject: [PATCH 3/8] lxd/container: Cleanup mount logic
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/container_lxc.go | 21 ++-------------------
 1 file changed, 2 insertions(+), 19 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 4c6bb2999d..c27404edb0 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -2408,7 +2408,7 @@ func (c *containerLXC) OnStart() error {
        c.fromHook = true
 
        // Start the storage for this container
-       ourStart, err := c.storageStartSensitive()
+       ourStart, err := c.mount()
        if err != nil {
                return err
        }
@@ -6017,25 +6017,8 @@ func (c *containerLXC) mount() (bool, error) {
                return ourMount, nil
        }
 
-       // Initialize legacy storage interface for the container.
-       err = c.initStorage()
-       if err != nil {
-               return false, err
-       }
-
-       isOurOperation, err := c.storageStartSensitive()
-       // Remove this as soon as zfs is fixed
-       if c.storage.GetStorageType() == storageTypeZfs && err == unix.EBUSY {
-               return isOurOperation, nil
-       }
-
-       return isOurOperation, err
-}
-
-// Kill this function as soon as zfs is fixed.
-func (c *containerLXC) storageStartSensitive() (bool, error) {
        // Initialize storage interface for the container.
-       err := c.initStorage()
+       err = c.initStorage()
        if err != nil {
                return false, err
        }

From 200dd1a7f1f993aa5522f55b722d7f3633e6ee59 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Fri, 6 Dec 2019 00:59:34 -0500
Subject: [PATCH 4/8] lxd/storage: Port volume attach/detach
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.go | 53 ++++++++++++++++++++++++++++++++++----------------
 1 file changed, 36 insertions(+), 17 deletions(-)

diff --git a/lxd/storage.go b/lxd/storage.go
index 86ad48d88a..841889b0ee 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -33,11 +33,12 @@ import (
 func init() {
        // Expose storageVolumeMount to the device package as 
StorageVolumeMount.
        device.StorageVolumeMount = storageVolumeMount
+
        // Expose storageVolumeUmount to the device package as 
StorageVolumeUmount.
        device.StorageVolumeUmount = storageVolumeUmount
+
        // Expose storageRootFSApplyQuota to the device package as 
StorageRootFSApplyQuota.
        device.StorageRootFSApplyQuota = storageRootFSApplyQuota
-
 }
 
 // lxdStorageLockMap is a hashmap that allows functions to check whether the
@@ -833,15 +834,25 @@ func storageVolumeMount(state *state.State, poolName 
string, volumeName string,
                return fmt.Errorf("Received non-LXC container instance")
        }
 
-       volumeType, _ := storagePools.VolumeTypeNameToType(volumeTypeName)
-       s, err := storagePoolVolumeAttachInit(state, poolName, volumeName, 
volumeType, c)
-       if err != nil {
-               return err
-       }
+       pool, err := storagePools.GetPoolByName(state, poolName)
+       if err != storageDrivers.ErrUnknownDriver && err != 
storageDrivers.ErrNotImplemented {
+               // FIXME: need equivalent to AttachInit
+               _, err = pool.MountCustomVolume(volumeName, nil)
+               if err != nil {
+                       return err
+               }
+       } else {
+               // Custom storage volumes do not currently support projects, so 
hardcode "default" project.
+               volumeType, _ := 
storagePools.VolumeTypeNameToType(volumeTypeName)
+               s, err := storagePoolVolumeAttachInit(state, poolName, 
volumeName, volumeType, c)
+               if err != nil {
+                       return err
+               }
 
-       _, err = s.StoragePoolVolumeMount()
-       if err != nil {
-               return err
+               _, err = s.StoragePoolVolumeMount()
+               if err != nil {
+                       return err
+               }
        }
 
        return nil
@@ -849,15 +860,23 @@ func storageVolumeMount(state *state.State, poolName 
string, volumeName string,
 
 // storageVolumeUmount unmounts a storage volume on a pool.
 func storageVolumeUmount(state *state.State, poolName string, volumeName 
string, volumeType int) error {
-       // Custom storage volumes do not currently support projects, so 
hardcode "default" project.
-       s, err := storagePoolVolumeInit(state, "default", poolName, volumeName, 
volumeType)
-       if err != nil {
-               return err
-       }
+       pool, err := storagePools.GetPoolByName(state, poolName)
+       if err != storageDrivers.ErrUnknownDriver && err != 
storageDrivers.ErrNotImplemented {
+               _, err = pool.UnmountCustomVolume(volumeName, nil)
+               if err != nil {
+                       return err
+               }
+       } else {
+               // Custom storage volumes do not currently support projects, so 
hardcode "default" project.
+               s, err := storagePoolVolumeInit(state, "default", poolName, 
volumeName, volumeType)
+               if err != nil {
+                       return err
+               }
 
-       _, err = s.StoragePoolVolumeUmount()
-       if err != nil {
-               return err
+               _, err = s.StoragePoolVolumeUmount()
+               if err != nil {
+                       return err
+               }
        }
 
        return nil

From 3f42e6287531179a7e305157a6d62d2e119e985b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Fri, 6 Dec 2019 01:04:02 -0500
Subject: [PATCH 5/8] lxd/container: Remove unused initStorage
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/container_lxc.go | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index c27404edb0..33d1bb1cd5 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -4079,12 +4079,6 @@ func (c *containerLXC) Update(args db.InstanceArgs, 
userRequested bool) error {
                return errors.Wrap(err, "Initialize LXC")
        }
 
-       // Initialize storage interface for the container.
-       err = c.initStorage()
-       if err != nil {
-               return errors.Wrap(err, "Initialize storage")
-       }
-
        // If apparmor changed, re-validate the apparmor profile
        if shared.StringInSlice("raw.apparmor", changedConfig) || 
shared.StringInSlice("security.nesting", changedConfig) {
                err = apparmor.ParseProfile(c)

From 8bfc4f0c16f978d3d5cab791afed3e325d0747a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 7 Dec 2019 21:38:21 -0500
Subject: [PATCH 6/8] lxd/import: Fix handling of new drivers
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/api_internal.go | 46 ++++++++++++++++++++++++++++-----------------
 1 file changed, 29 insertions(+), 17 deletions(-)

diff --git a/lxd/api_internal.go b/lxd/api_internal.go
index 1740f1bfb0..4a5e8e6d3f 100644
--- a/lxd/api_internal.go
+++ b/lxd/api_internal.go
@@ -26,6 +26,8 @@ import (
        "github.com/lxc/lxd/lxd/project"
        "github.com/lxc/lxd/lxd/response"
        driver "github.com/lxc/lxd/lxd/storage"
+       storagePools "github.com/lxc/lxd/lxd/storage"
+       storageDrivers "github.com/lxc/lxd/lxd/storage/drivers"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
        log "github.com/lxc/lxd/shared/log15"
@@ -518,30 +520,40 @@ func internalImport(d *Daemon, r *http.Request) 
response.Response {
                }
        }
 
-       initPool, err := storagePoolInit(d.State(), backup.Pool.Name)
-       if err != nil {
-               err = errors.Wrap(err, "Initialize storage")
-               return response.InternalError(err)
-       }
+       var poolName string
+       _, err = storagePools.GetPoolByName(d.State(), backup.Pool.Name)
+       if err != storageDrivers.ErrUnknownDriver && err != db.ErrNoSuchObject {
+               if err != nil {
+                       return response.InternalError(err)
+               }
 
-       ourMount, err := initPool.StoragePoolMount()
-       if err != nil {
-               return response.InternalError(err)
-       }
-       if ourMount {
-               defer initPool.StoragePoolUmount()
+               // FIXME: In the new world, we don't expose the on-disk pool
+               // name, instead we need to change the per-driver logic below 
to using
+               // clean storage functions.
+               poolName = backup.Pool.Name
+       } else {
+               initPool, err := storagePoolInit(d.State(), backup.Pool.Name)
+               if err != nil {
+                       err = errors.Wrap(err, "Initialize storage")
+                       return response.InternalError(err)
+               }
+
+               ourMount, err := initPool.StoragePoolMount()
+               if err != nil {
+                       return response.InternalError(err)
+               }
+               if ourMount {
+                       defer initPool.StoragePoolUmount()
+               }
+
+               // retrieve on-disk pool name
+               _, _, poolName = initPool.GetContainerPoolInfo()
        }
 
        existingSnapshots := []*api.InstanceSnapshot{}
        needForce := fmt.Errorf(`The snapshot does not exist on disk. Pass ` +
                `"force" to discard non-existing snapshots`)
 
-       // retrieve on-disk pool name
-       _, _, poolName := initPool.GetContainerPoolInfo()
-       if err != nil {
-               return response.InternalError(err)
-       }
-
        // Retrieve all snapshots that exist on disk.
        onDiskSnapshots := []string{}
        if len(backup.Snapshots) > 0 {

From cdaf567ceaf7a5c402d6bb5c5ae835e3660d9511 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 7 Dec 2019 21:38:37 -0500
Subject: [PATCH 7/8] lxd/backup: Fix backup creation on new drivers
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/backup.go | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/lxd/backup.go b/lxd/backup.go
index 07805ceb16..b784e9129e 100644
--- a/lxd/backup.go
+++ b/lxd/backup.go
@@ -104,7 +104,7 @@ func backupCreate(s *state.State, args 
db.InstanceBackupArgs, sourceInst instanc
 
 func backupCreateTarball(s *state.State, path string, b backup.Backup, c 
instance.Instance) error {
        // Create the index
-       pool, err := c.StoragePool()
+       poolName, err := c.StoragePool()
        if err != nil {
                return err
        }
@@ -113,16 +113,26 @@ func backupCreateTarball(s *state.State, path string, b 
backup.Backup, c instanc
                return fmt.Errorf("Instance type must be container")
        }
 
-       ct := c.(*containerLXC)
-
        indexFile := backup.Info{
                Name:       c.Name(),
-               Backend:    ct.Storage().GetStorageTypeName(),
                Privileged: c.IsPrivileged(),
-               Pool:       pool,
+               Pool:       poolName,
                Snapshots:  []string{},
        }
 
+       pool, err := storagePools.GetPoolByInstance(s, c)
+       if err != storageDrivers.ErrUnknownDriver && err != db.ErrNoSuchObject {
+               if err != nil {
+                       return err
+               }
+
+               info := pool.Driver().Info()
+               indexFile.Backend = info.Name
+       } else {
+               ct := c.(*containerLXC)
+               indexFile.Backend = ct.Storage().GetStorageTypeName()
+       }
+
        if !b.InstanceOnly() {
                snaps, err := c.Snapshots()
                if err != nil {

From a688cd9b4dd601cc56ab804920a126993b5487d3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Sat, 7 Dec 2019 21:48:05 -0500
Subject: [PATCH 8/8] lxd/storage/zfs: Use StoragePool to get pool name
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_zfs.go | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index 16b74562ea..12c6776022 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -1274,8 +1274,16 @@ func (s *storageZfs) ContainerCopy(target 
instance.Instance, source instance.Ins
        srcCt := source.(*containerLXC)
        targetCt := target.(*containerLXC)
 
-       _, sourcePool, _ := srcCt.Storage().GetContainerPoolInfo()
-       _, targetPool, _ := targetCt.Storage().GetContainerPoolInfo()
+       sourcePool, err := srcCt.StoragePool()
+       if err != nil {
+               return err
+       }
+
+       targetPool, err := targetCt.StoragePool()
+       if err != nil {
+               return err
+       }
+
        if sourcePool != targetPool {
                err := s.doCrossPoolContainerCopy(target, source, 
containerOnly, false, nil)
                if err != nil {
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to