From 9a4ee4f20522dc979398e83cf3348b3a42c41640 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Tue, 19 Nov 2019 07:46:48 -0800 Subject: [PATCH] vc: Utilize map for newMounts to speed up replaceOCIMountSource Fixes #2212 Signed-off-by: Ted Yu --- virtcontainers/container.go | 6 +++--- virtcontainers/kata_agent.go | 8 ++------ 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/virtcontainers/container.go b/virtcontainers/container.go index 701d5c6788..a656fe7f88 100644 --- a/virtcontainers/container.go +++ b/virtcontainers/container.go @@ -533,8 +533,8 @@ func (c *Container) shareFiles(m Mount, idx int, hostSharedDir, guestSharedDir s // It also updates the container mount list with the HostPath info, and store // container mounts to the storage. This way, we will have the HostPath info // available when we will need to unmount those mounts. -func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) ([]Mount, []Mount, error) { - var sharedDirMounts []Mount +func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) (map[string]Mount, []Mount, error) { + sharedDirMounts := make(map[string]Mount) var ignoredMounts []Mount for idx, m := range c.mounts { // Skip mounting certain system paths from the source on the host side @@ -607,7 +607,7 @@ func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) ( ReadOnly: readonly, } - sharedDirMounts = append(sharedDirMounts, sharedDirMount) + sharedDirMounts[sharedDirMount.Destination] = sharedDirMount } if !c.sandbox.supportNewStore() { diff --git a/virtcontainers/kata_agent.go b/virtcontainers/kata_agent.go index 781e0c6d6e..3567888df7 100644 --- a/virtcontainers/kata_agent.go +++ b/virtcontainers/kata_agent.go @@ -962,15 +962,11 @@ func (k *kataAgent) stopSandbox(sandbox *Sandbox) error { return nil } -func (k *kataAgent) replaceOCIMountSource(spec *specs.Spec, guestMounts []Mount) error { +func (k *kataAgent) replaceOCIMountSource(spec *specs.Spec, guestMounts map[string]Mount) error { ociMounts := spec.Mounts for index, m := range ociMounts { - for _, guestMount := range guestMounts { - if guestMount.Destination != m.Destination { - continue - } - + if guestMount, ok := guestMounts[m.Destination]; ok { k.Logger().Debugf("Replacing OCI mount (%s) source %s with %s", m.Destination, m.Source, guestMount.Source) ociMounts[index].Source = guestMount.Source }