From 2a5e4c4be74fdd1589b98960f2c6caa1bcf4bb30 Mon Sep 17 00:00:00 2001 From: Georgi Sabev Date: Fri, 29 Mar 2019 16:57:47 +0200 Subject: [PATCH] Skip rootfs unmount when no mounts are provided Co-authored-by: Julia Nedialkova Signed-off-by: Georgi Sabev --- runtime/v1/linux/proc/init.go | 10 ++++++---- runtime/v1/shim/service.go | 12 ++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/runtime/v1/linux/proc/init.go b/runtime/v1/linux/proc/init.go index 10787ed87829..38c32fe66e6b 100644 --- a/runtime/v1/linux/proc/init.go +++ b/runtime/v1/linux/proc/init.go @@ -304,10 +304,12 @@ func (p *Init) delete(ctx context.Context) error { } p.io.Close() } - if err2 := mount.UnmountAll(p.Rootfs, 0); err2 != nil { - log.G(ctx).WithError(err2).Warn("failed to cleanup rootfs mount") - if err == nil { - err = errors.Wrap(err2, "failed rootfs umount") + if p.Rootfs != "" { + if err2 := mount.UnmountAll(p.Rootfs, 0); err2 != nil { + log.G(ctx).WithError(err2).Warn("failed to cleanup rootfs mount") + if err == nil { + err = errors.Wrap(err2, "failed rootfs umount") + } } } return err diff --git a/runtime/v1/shim/service.go b/runtime/v1/shim/service.go index 701dab4353df..894a5b4501d6 100644 --- a/runtime/v1/shim/service.go +++ b/runtime/v1/shim/service.go @@ -138,13 +138,13 @@ func (s *Service) Create(ctx context.Context, r *shimapi.CreateTaskRequest) (_ * Options: r.Options, } rootfs := filepath.Join(r.Bundle, "rootfs") - defer func() { + defer func(rootfs string) { if err != nil { if err2 := mount.UnmountAll(rootfs, 0); err2 != nil { log.G(ctx).WithError(err2).Warn("Failed to cleanup rootfs mount") } } - }() + }(rootfs) for _, rm := range mounts { m := &mount.Mount{ Type: rm.Type, @@ -159,6 +159,10 @@ func (s *Service) Create(ctx context.Context, r *shimapi.CreateTaskRequest) (_ * s.mu.Lock() defer s.mu.Unlock() + if len(mounts) == 0 { + rootfs = "" + } + process, err := newInit( ctx, s.config.Path, @@ -169,6 +173,7 @@ func (s *Service) Create(ctx context.Context, r *shimapi.CreateTaskRequest) (_ * s.config.SystemdCgroup, s.platform, config, + rootfs, ) if err != nil { return nil, errdefs.ToGRPC(err) @@ -632,7 +637,7 @@ func getTopic(ctx context.Context, e interface{}) string { return runtime.TaskUnknownTopic } -func newInit(ctx context.Context, path, workDir, runtimeRoot, namespace, criu string, systemdCgroup bool, platform rproc.Platform, r *proc.CreateConfig) (*proc.Init, error) { +func newInit(ctx context.Context, path, workDir, runtimeRoot, namespace, criu string, systemdCgroup bool, platform rproc.Platform, r *proc.CreateConfig, rootfs string) (*proc.Init, error) { var options runctypes.CreateOptions if r.Options != nil { v, err := typeurl.UnmarshalAny(r.Options) @@ -642,7 +647,6 @@ func newInit(ctx context.Context, path, workDir, runtimeRoot, namespace, criu st options = *v.(*runctypes.CreateOptions) } - rootfs := filepath.Join(path, "rootfs") runtime := proc.NewRunc(runtimeRoot, path, namespace, r.Runtime, criu, systemdCgroup) p := proc.New(r.ID, runtime, rproc.Stdio{ Stdin: r.Stdin,