mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
f26203cf54
Instead of globally keeping track of the free device ids we just start from 0 each run and handle EEXIST error and try the next one. This way we don't need any global state for the device ids, which means we can read device metadata lazily. This is important for multi-process use of the backend. Docker-DCO-1.1-Signed-off-by: Alexander Larsson <alexl@redhat.com> (github: alexlarsson)
30 lines
668 B
Go
30 lines
668 B
Go
// +build linux,amd64
|
|
|
|
package devmapper
|
|
|
|
import "C"
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// Due to the way cgo works this has to be in a separate file, as devmapper.go has
|
|
// definitions in the cgo block, which is incompatible with using "//export"
|
|
|
|
//export DevmapperLogCallback
|
|
func DevmapperLogCallback(level C.int, file *C.char, line C.int, dm_errno_or_class C.int, message *C.char) {
|
|
msg := C.GoString(message)
|
|
if level < 7 {
|
|
if strings.Contains(msg, "busy") {
|
|
dmSawBusy = true
|
|
}
|
|
|
|
if strings.Contains(msg, "File exists") {
|
|
dmSawExist = true
|
|
}
|
|
}
|
|
|
|
if dmLogger != nil {
|
|
dmLogger.log(int(level), C.GoString(file), int(line), int(dm_errno_or_class), msg)
|
|
}
|
|
}
|