mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-31 15:25:26 +00:00
qemu: kill virtiofsd if failure to start VMM
If the QEMU VMM fails to launch, we currently fail to kill virtiofsd, resulting in leftover processes running on the host. Let's make sure we kill these, and explicitly cleanup the virtiofs socket on the filesystem. Ideally we'll migrate QEMU to utilize the same virtiofsd interface that CLH uses, but let's fix this bug as a first step. Fixes: #1755 Signed-off-by: Eric Ernst <eric_ernst@apple.com>
This commit is contained in:
parent
fb30c58847
commit
a57c8ab1be
@ -710,6 +710,28 @@ func (q *qemu) setupVirtiofsd(ctx context.Context) (err error) {
|
||||
return err
|
||||
}
|
||||
|
||||
func (q *qemu) stopVirtiofsd(ctx context.Context) (err error) {
|
||||
|
||||
// kill virtiofsd
|
||||
if q.state.VirtiofsdPid == 0 {
|
||||
return errors.New("invalid virtiofsd PID(0)")
|
||||
}
|
||||
|
||||
err = syscall.Kill(q.state.VirtiofsdPid, syscall.SIGKILL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
q.state.VirtiofsdPid = 0
|
||||
|
||||
// remove virtiofsd socket
|
||||
sockPath, err := q.vhostFSSocketPath(q.id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.Remove(sockPath)
|
||||
}
|
||||
|
||||
func (q *qemu) getMemArgs() (bool, string, string, error) {
|
||||
share := false
|
||||
target := ""
|
||||
@ -830,6 +852,14 @@ func (q *qemu) startSandbox(ctx context.Context, timeout int) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer func() {
|
||||
if err != nil {
|
||||
if shutdownErr := q.stopVirtiofsd(ctx); shutdownErr != nil {
|
||||
q.Logger().WithError(shutdownErr).Warn("failed to stop virtiofsd")
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
|
||||
var strErr string
|
||||
@ -841,7 +871,6 @@ func (q *qemu) startSandbox(ctx context.Context, timeout int) error {
|
||||
strErr += string(b)
|
||||
}
|
||||
}
|
||||
|
||||
q.Logger().WithError(err).Errorf("failed to launch qemu: %s", strErr)
|
||||
return fmt.Errorf("failed to launch qemu: %s, error messages from qemu log: %s", err, strErr)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user