Skip to content

Commit

Permalink
Fix create-device-node test when devices exist
Browse files Browse the repository at this point in the history
This changes fixes the TestCreateControlDevices test on systems
where device nodes exist.

Signed-off-by: Evan Lezar <[email protected]>
  • Loading branch information
elezar committed Dec 6, 2024
1 parent b0a5fb9 commit 2529aeb
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 10 deletions.
10 changes: 1 addition & 9 deletions internal/system/nvdevices/devices.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ package nvdevices
import (
"errors"
"fmt"
"os"
"path/filepath"
"strings"

Expand Down Expand Up @@ -66,7 +65,7 @@ func New(opts ...Option) (*Interface, error) {
if i.dryRun {
i.mknoder = &mknodLogger{i.logger}
} else {
i.mknoder = &mknodUnix{}
i.mknoder = &mknodUnix{i.logger}
}
return i, nil
}
Expand Down Expand Up @@ -107,13 +106,6 @@ func (m *Interface) CreateNVIDIADevice(node string) error {
// If a devRoot is configured, this is prepended to the path.
func (m *Interface) createDeviceNode(path string, major int, minor int) error {
path = filepath.Join(m.devRoot, path)
if _, err := os.Stat(path); err == nil {
m.logger.Infof("Skipping: %s already exists", path)
return nil
} else if !os.IsNotExist(err) {
return fmt.Errorf("failed to stat %s: %v", path, err)
}

return m.Mknode(path, major, minor)
}

Expand Down
15 changes: 14 additions & 1 deletion internal/system/nvdevices/mknod.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
package nvdevices

import (
"fmt"
"os"

"golang.org/x/sys/unix"

"github.com/NVIDIA/nvidia-container-toolkit/internal/logger"
Expand All @@ -36,9 +39,19 @@ func (m *mknodLogger) Mknode(path string, major, minor int) error {
return nil
}

type mknodUnix struct{}
type mknodUnix struct {
logger logger.Interface
}

func (m *mknodUnix) Mknode(path string, major, minor int) error {
// TODO: Ensure that the existing device node has the correct properties.
if _, err := os.Stat(path); err == nil {
m.logger.Infof("Skipping: %s already exists", path)
return nil
} else if !os.IsNotExist(err) {
return fmt.Errorf("failed to stat %s: %v", path, err)
}

err := unix.Mknod(path, unix.S_IFCHR, int(unix.Mkdev(uint32(major), uint32(minor))))
if err != nil {
return err
Expand Down

0 comments on commit 2529aeb

Please sign in to comment.