code: func DevmapperLogCallback(level C.int, file *C.char, line, dmErrnoOrClass C.int, message *C.char) {
  	msg := C.GoString(message)
  
  	// Track what errno libdm saw, because the library only gives us 0 or 1.
  	if level < LogLevelDebug {
  		if strings.Contains(msg, "busy") {
  			dmSawBusy = true
  		}
  
  		if strings.Contains(msg, "File exists") {
  			dmSawExist = true
  		}
  
  		if strings.Contains(msg, "No such device or address") {
  			dmSawEnxio = true
  		}
  		if strings.Contains(msg, "No data available") {
  			dmSawEnoData = true
  		}
  	}
  
  	if dmLogger != nil {
  		dmLogger.DMLog(int(level), C.GoString(file), int(line), int(dmErrnoOrClass), msg)
  	}
  }
docs: // 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"
  // DevmapperLogCallback exports the devmapper log callback for cgo. Note that
  // because we are using callbacks, this function will be called for *every* log
  // in libdm (even debug ones because there's no way of setting the verbosity
  // level for an external logging callback).
  //export DevmapperLogCallback