[lxc-devel] [lxd/master] storage: do not mount custom volumes on create

brauner on Github lxc-bot at linuxcontainers.org
Fri Mar 9 10:39:32 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 364 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180309/bd8841a3/attachment.bin>
-------------- next part --------------
From af58d18682a9911e616120bf29e96b2bf9c5a320 Mon Sep 17 00:00:00 2001
From: Christian Brauner <christian.brauner at ubuntu.com>
Date: Fri, 9 Mar 2018 11:38:42 +0100
Subject: [PATCH] storage: do not mount custom volumes on create

Signed-off-by: Christian Brauner <christian.brauner at ubuntu.com>
---
 lxd/storage_ceph.go | 13 ++++++++-----
 lxd/storage_lvm.go  | 13 ++++++++-----
 lxd/storage_zfs.go  | 15 ++++++++++++++-
 3 files changed, 30 insertions(+), 11 deletions(-)

diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index ef9c6dd97..037cdae94 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -472,11 +472,6 @@ func (s *storageCeph) StoragePoolVolumeCreate() error {
 		}
 	}
 
-	_, err = s.StoragePoolVolumeMount()
-	if err != nil {
-		return err
-	}
-
 	logger.Debugf(`Created RBD storage volume "%s" on storage pool "%s"`,
 		s.volume.Name, s.pool.Name)
 
@@ -2923,6 +2918,14 @@ func (s *storageCeph) StoragePoolVolumeCopy(source *api.StorageVolumeSource) err
 		return err
 	}
 
+	ourMount, err := s.StoragePoolVolumeMount()
+	if err != nil {
+		return err
+	}
+	if ourMount {
+		defer s.StoragePoolVolumeUmount()
+	}
+
 	bwlimit := s.pool.Config["rsync.bwlimit"]
 	_, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit)
 	if err != nil {
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 2622a18e9..87b53254e 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -510,11 +510,6 @@ func (s *storageLvm) StoragePoolVolumeCreate() error {
 		}
 	}
 
-	_, err = s.StoragePoolVolumeMount()
-	if err != nil {
-		return err
-	}
-
 	tryUndo = false
 
 	logger.Infof("Created LVM storage volume \"%s\" on storage pool \"%s\".", s.volume.Name, s.pool.Name)
@@ -1911,6 +1906,14 @@ func (s *storageLvm) StoragePoolVolumeCopy(source *api.StorageVolumeSource) erro
 		return err
 	}
 
+	ourMount, err := s.StoragePoolVolumeMount()
+	if err != nil {
+		return err
+	}
+	if ourMount {
+		defer s.StoragePoolVolumeUmount()
+	}
+
 	bwlimit := s.pool.Config["rsync.bwlimit"]
 	_, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit)
 	if err != nil {
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index ce41942cb..553454790 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -394,7 +394,11 @@ func (s *storageZfs) StoragePoolVolumeCreate() error {
 	}
 
 	if !shared.IsMountPoint(customPoolVolumeMntPoint) {
-		zfsMount(poolName, fs)
+		err := zfsMount(poolName, fs)
+		if err != nil {
+			return err
+		}
+		defer zfsUmount(poolName, fs)
 	}
 
 	// apply quota
@@ -2539,6 +2543,15 @@ func (s *storageZfs) StoragePoolVolumeCopy(source *api.StorageVolumeSource) erro
 		return err
 	}
 
+	ourMount, err := s.StoragePoolVolumeMount()
+	if err != nil {
+		logger.Errorf("Failed to mount ZFS storage volume \"%s\" on storage pool \"%s\": %s", s.volume.Name, s.pool.Name, err)
+		return err
+	}
+	if ourMount {
+		defer s.StoragePoolVolumeUmount()
+	}
+
 	bwlimit := s.pool.Config["rsync.bwlimit"]
 	_, err = rsyncLocalCopy(srcMountPoint, dstMountPoint, bwlimit)
 	if err != nil {


More information about the lxc-devel mailing list