diff -aruN docker-1.7.1/daemon/graphdriver/devmapper/deviceset.go docker-1.7.1-go-1.5/daemon/graphdriver/devmapper/deviceset.go --- docker-1.7.1/daemon/graphdriver/devmapper/deviceset.go 2015-07-14 20:41:25.000000000 +0200 +++ docker-1.7.1-go-1.5/daemon/graphdriver/devmapper/deviceset.go 2016-02-22 13:46:24.352870744 +0100 @@ -1272,14 +1272,15 @@ if err != nil { return err } - if d, err := devicemapper.GetDeps(devname); err == nil { - // Access to more Debug output - logrus.Debugf("[devmapper] devicemapper.GetDeps() %s: %#v", devname, d) + if devinfo.Exists == 0 { + return nil + } + if err := devicemapper.RemoveDevice(devname); err != nil { + return err } - if devinfo.Exists != 0 { - return devicemapper.RemoveDevice(devname) + if d, err := devicemapper.GetDeps(devname); err == nil { + logrus.Warnf("[devmapper] device %s still has %d active dependents", devname, d.Count) } - return nil } diff -aruN docker-1.7.1/pkg/devicemapper/devmapper_wrapper.go docker-1.7.1-go-1.5/pkg/devicemapper/devmapper_wrapper.go --- docker-1.7.1/pkg/devicemapper/devmapper_wrapper.go 2015-07-14 20:41:25.000000000 +0200 +++ docker-1.7.1-go-1.5/pkg/devicemapper/devmapper_wrapper.go 2016-02-22 13:44:52.810197554 +0100 @@ -38,7 +38,10 @@ */ import "C" -import "unsafe" +import ( + "reflect" + "unsafe" +) type ( CDmTask C.struct_dm_task @@ -184,13 +187,22 @@ if Cdeps == nil { return nil } + + // golang issue: https://github.com/golang/go/issues/11925 + hdr := reflect.SliceHeader{ + Data: uintptr(unsafe.Pointer(uintptr(unsafe.Pointer(Cdeps)) + unsafe.Sizeof(*Cdeps))), + Len: int(Cdeps.count), + Cap: int(Cdeps.count), + } + devices := *(*[]C.uint64_t)(unsafe.Pointer(&hdr)) + deps := &Deps{ Count: uint32(Cdeps.count), Filler: uint32(Cdeps.filler), } - for _, device := range Cdeps.device { - deps.Device = append(deps.Device, (uint64)(device)) - } + for _, device := range devices { + deps.Device = append(deps.Device, uint64(device)) + } return deps }