From b890c20555596911d203befaf0e30efece6371d7 Mon Sep 17 00:00:00 2001 From: Kir Kolyshkin Date: Mon, 9 Mar 2020 12:14:02 -0700 Subject: [PATCH] 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 --- pkg/archive/archive_linux.go | 11 +++++------ pkg/archive/archive_linux_test.go | 9 +++++---- pkg/mount/mount.go | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pkg/archive/archive_linux.go b/pkg/archive/archive_linux.go index 0601f7b0d1..fae42c00e6 100644 --- a/pkg/archive/archive_linux.go +++ b/pkg/archive/archive_linux.go @@ -10,6 +10,7 @@ import ( "syscall" "github.com/containerd/continuity/fs" + "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/system" "github.com/pkg/errors" "golang.org/x/sys/unix" @@ -152,9 +153,8 @@ func mknodChar0Overlay(cleansedOriginalPath string) error { return errors.Wrapf(err, "failed to create a dummy lower file %s", lowerDummy) } mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work) - // docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead. - if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil { - return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged) + if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil { + return err } mergedDummy := filepath.Join(merged, dummyBase) if err := os.Remove(mergedDummy); err != nil { @@ -237,9 +237,8 @@ func createDirWithOverlayOpaque(tmp string) (string, error) { return "", errors.Wrapf(err, "failed to create a dummy lower directory %s", lowerDummy) } mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work) - // docker/pkg/mount.Mount() requires procfs to be mounted. So we use syscall.Mount() directly instead. - if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil { - return "", errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged) + if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil { + return "", err } mergedDummy := filepath.Join(merged, dummyBase) if err := os.Remove(mergedDummy); err != nil { diff --git a/pkg/archive/archive_linux_test.go b/pkg/archive/archive_linux_test.go index e756defcfb..ffec59bcde 100644 --- a/pkg/archive/archive_linux_test.go +++ b/pkg/archive/archive_linux_test.go @@ -9,6 +9,7 @@ import ( "syscall" "testing" + "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/reexec" "github.com/docker/docker/pkg/system" rsystem "github.com/opencontainers/runc/libcontainer/system" @@ -204,11 +205,11 @@ func supportsOverlay(dir string) error { } } mOpts := fmt.Sprintf("lowerdir=%s,upperdir=%s,workdir=%s", lower, upper, work) - if err := syscall.Mount("overlay", merged, "overlay", uintptr(0), mOpts); err != nil { - return errors.Wrapf(err, "failed to mount overlay (%s) on %s", mOpts, merged) + if err := mount.Mount("overlay", merged, "overlay", mOpts); err != nil { + return err } - if err := syscall.Unmount(merged, 0); err != nil { - return errors.Wrapf(err, "failed to unmount %s", merged) + if err := mount.Unmount(merged); err != nil { + return err } return nil } diff --git a/pkg/mount/mount.go b/pkg/mount/mount.go index 52324fdd30..6e5e9c0d0c 100644 --- a/pkg/mount/mount.go +++ b/pkg/mount/mount.go @@ -105,7 +105,7 @@ func Mount(device, target, mType, options string) error { return mount(device, target, mType, uintptr(flag), data) } -// Mount will mount filesystem according to the specified configuration. +// ForceMount will mount filesystem according to the specified configuration. // Options must be specified like the mount or fstab unix commands: // "opt1=val1,opt2=val2". See flags.go for supported option flags. //