m/n/core/devmgr: load modules in separate goroutines
If we spend too much time processing kobject uevents, we get an ENOBUFS
error:
root.devmgr: error receiving kobject uevent: no buffer space available
This is a hot-fix for this issue. A better solution would be to have a
single goroutine that handles all loading in order to avoid goroutine
leaks. But this will do for now.
Change-Id: Id085e1e489760c33b1f278dd7c17bf58c01bdad8
Reviewed-on: https://review.monogon.dev/c/monogon/+/1877
Tested-by: Jenkins CI
Reviewed-by: Lorenz Brun <lorenz@monogon.tech>
diff --git a/metropolis/node/core/devmgr/devmgr.go b/metropolis/node/core/devmgr/devmgr.go
index fc626b0..8133c77 100644
--- a/metropolis/node/core/devmgr/devmgr.go
+++ b/metropolis/node/core/devmgr/devmgr.go
@@ -69,9 +69,11 @@
}
if e.Action == kobject.Add {
if e.Values["MODALIAS"] != "" {
- if err := modMgr.LoadModulesForDevice(e.Values["MODALIAS"]); err != nil {
- l.Errorf("Error loading kernel modules: %w", err)
- }
+ go func(e *kobject.Event) {
+ if err := modMgr.LoadModulesForDevice(e.Values["MODALIAS"]); err != nil {
+ l.Errorf("Error loading kernel modules: %w", err)
+ }
+ }(e)
}
}
}