From f08989902374a517b1f8e5e0bfd3b4ea59e5ba27 Mon Sep 17 00:00:00 2001 From: Arnaud Porterie Date: Wed, 8 Jul 2015 09:05:37 -0700 Subject: [PATCH] Fix panic on devicemapper initialization The ability to save and verify base device UUID (#13896) introduced a situation where the initialization would panic when removing the device returns EBUSY. Functions `verifyBaseDeviceUUID` and `saveBaseDeviceUUID` now take the lock on the `DeviceSet`, which solves the problem as `removeDevice` assumes it owns the lock. Signed-off-by: Arnaud Porterie --- daemon/graphdriver/devmapper/deviceset.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index 0f2dcb9f37..656b5cce5d 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -691,6 +691,9 @@ func getDeviceUUID(device string) (string, error) { } func (devices *DeviceSet) verifyBaseDeviceUUID(baseInfo *DevInfo) error { + devices.Lock() + defer devices.Unlock() + if err := devices.activateDeviceIfNeeded(baseInfo); err != nil { return err } @@ -710,6 +713,9 @@ func (devices *DeviceSet) verifyBaseDeviceUUID(baseInfo *DevInfo) error { } func (devices *DeviceSet) saveBaseDeviceUUID(baseInfo *DevInfo) error { + devices.Lock() + defer devices.Unlock() + if err := devices.activateDeviceIfNeeded(baseInfo); err != nil { return err }