Browse code

pkg/archive: use mount pkg

It makes sense to use mount package here because
- it no longer requires /proc to be mounted
- it provides verbose errors so the caller doesn't have to

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>

Kir Kolyshkin authored on 2020/03/10 04:14:02
Showing 3 changed files
... ...
@@ -10,6 +10,7 @@ import (
10 10
 	"syscall"
11 11
 
12 12
 	"github.com/containerd/continuity/fs"
13
+	"github.com/docker/docker/pkg/mount"
13 14
 	"github.com/docker/docker/pkg/system"
14 15
 	"github.com/pkg/errors"
15 16
 	"golang.org/x/sys/unix"
... ...
@@ -152,9 +153,8 @@ func mknodChar0Overlay(cleansedOriginalPath string) error {
152 152
 		return errors.Wrapf(err, "failed to create a dummy lower file %s", lowerDummy)
153 153
 	}
154 154
 	mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
155
-	// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
156
-	if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
157
-		return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
155
+	if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil {
156
+		return err
158 157
 	}
159 158
 	mergedDummy := filepath.Join(merged, dummyBase)
160 159
 	if err := os.Remove(mergedDummy); err != nil {
... ...
@@ -237,9 +237,8 @@ func createDirWithOverlayOpaque(tmp string) (string, error) {
237 237
 		return "", errors.Wrapf(err, "failed to create a dummy lower directory %s", lowerDummy)
238 238
 	}
239 239
 	mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
240
-	// docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead.
241
-	if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
242
-		return "", errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
240
+	if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil {
241
+		return "", err
243 242
 	}
244 243
 	mergedDummy := filepath.Join(merged, dummyBase)
245 244
 	if err := os.Remove(mergedDummy); err != nil {
... ...
@@ -9,6 +9,7 @@ import (
9 9
 	"syscall"
10 10
 	"testing"
11 11
 
12
+	"github.com/docker/docker/pkg/mount"
12 13
 	"github.com/docker/docker/pkg/reexec"
13 14
 	"github.com/docker/docker/pkg/system"
14 15
 	rsystem "github.com/opencontainers/runc/libcontainer/system"
... ...
@@ -204,11 +205,11 @@ func supportsOverlay(dir string) error {
204 204
 		}
205 205
 	}
206 206
 	mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work)
207
-	if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil {
208
-		return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged)
207
+	if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil {
208
+		return err
209 209
 	}
210
-	if err := syscall.Unmount(merged, 0); err != nil {
211
-		return errors.Wrapf(err, "failed to unmount %s", merged)
210
+	if err := mount.Unmount(merged); err != nil {
211
+		return err
212 212
 	}
213 213
 	return nil
214 214
 }
... ...
@@ -105,7 +105,7 @@ func Mount(device, target, mType, options string) error {
105 105
 	return mount(device, target, mType, uintptr(flag), data)
106 106
 }
107 107
 
108
-// Mount will mount filesystem according to the specified configuration.
108
+// ForceMount will mount filesystem according to the specified configuration.
109 109
 // Options must be specified like the mount or fstab unix commands:
110 110
 // "opt1=val1,opt2=val2". See flags.go for supported option flags.
111 111
 //