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>
| ... | ... |
@@ -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 |
// |