summaryrefslogtreecommitdiff
path: root/libpod/container_internal.go
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-09-05 10:00:50 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-09-05 17:12:27 -0400
commitde9a394fcff19ae4422a3f65502c8790787351fd (patch)
treedde244b17ac8c23a87182b82b424c50f81521090 /libpod/container_internal.go
parenta760e325f3180638f9fedd0ee79d4c6695d8ba64 (diff)
downloadpodman-de9a394fcff19ae4422a3f65502c8790787351fd.tar.gz
podman-de9a394fcff19ae4422a3f65502c8790787351fd.tar.bz2
podman-de9a394fcff19ae4422a3f65502c8790787351fd.zip
Correctly report errors on unmounting SHM
When we fail to remove a container's SHM, that's an error, and we need to report it as such. This may be part of our lingering storage woes. Also, remove MNT_DETACH. It may be another cause of the storage removal failures. Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'libpod/container_internal.go')
-rw-r--r--libpod/container_internal.go21
1 files changed, 13 insertions, 8 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 67503f148..ffc6c11ee 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -1253,10 +1253,10 @@ func (c *Container) mountStorage() (_ string, Err error) {
return
}
vol.lock.Lock()
- defer vol.lock.Unlock()
if err := vol.unmount(false); err != nil {
logrus.Errorf("Error unmounting volume %s after error mounting container %s: %v", vol.Name(), c.ID(), err)
}
+ vol.lock.Unlock()
}()
}
}
@@ -1281,14 +1281,19 @@ func (c *Container) cleanupStorage() error {
return nil
}
+ var cleanupErr error
+
for _, containerMount := range c.config.Mounts {
if err := c.unmountSHM(containerMount); err != nil {
- return err
+ if cleanupErr != nil {
+ logrus.Errorf("Error unmounting container %s: %v", c.ID(), cleanupErr)
+ }
+ cleanupErr = err
}
}
if c.config.Rootfs != "" {
- return nil
+ return cleanupErr
}
if err := c.unmount(false); err != nil {
@@ -1298,14 +1303,14 @@ func (c *Container) cleanupStorage() error {
// state
if errors.Cause(err) == storage.ErrNotAContainer || errors.Cause(err) == storage.ErrContainerUnknown {
logrus.Errorf("Storage for container %s has been removed", c.ID())
- return nil
+ } else {
+ if cleanupErr != nil {
+ logrus.Errorf("Error cleaning up container %s storage: %v", c.ID(), cleanupErr)
+ }
+ cleanupErr = err
}
-
- return err
}
- var cleanupErr error
-
// Request an unmount of all named volumes
for _, v := range c.config.NamedVolumes {
vol, err := c.runtime.state.Volume(v.Name)