diff --git a/layer/layer_store.go b/layer/layer_store.go index 619c1a3020..229ba6a3a2 100644 --- a/layer/layer_store.go +++ b/layer/layer_store.go @@ -498,18 +498,21 @@ func (ls *layerStore) ReleaseRWLayer(l RWLayer) ([]Metadata, error) { if err := ls.driver.Remove(m.mountID); err != nil { logrus.Errorf("Error removing mounted layer %s: %s", m.name, err) + m.retakeReference(l) return nil, err } if m.initID != "" { if err := ls.driver.Remove(m.initID); err != nil { logrus.Errorf("Error removing init layer %s: %s", m.name, err) + m.retakeReference(l) return nil, err } } if err := ls.store.RemoveMount(m.name); err != nil { logrus.Errorf("Error removing mount metadata: %s: %s", m.name, err) + m.retakeReference(l) return nil, err } diff --git a/layer/mounted_layer.go b/layer/mounted_layer.go index b3d6568833..bf662e9a42 100644 --- a/layer/mounted_layer.go +++ b/layer/mounted_layer.go @@ -96,6 +96,13 @@ func (ml *mountedLayer) deleteReference(ref RWLayer) error { return nil } +func (ml *mountedLayer) retakeReference(r RWLayer) { + if ref, ok := r.(*referencedRWLayer); ok { + ref.activityCount = 0 + ml.references[ref] = ref + } +} + type referencedRWLayer struct { *mountedLayer