From 01f70b028e9597ef207509e8124e120688dae185 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Thu, 27 Jul 2017 09:51:23 +0200 Subject: [PATCH] Switch Stat syscalls to x/sys/unix Switch some more usage of the Stat function and the Stat_t type from the syscall package to golang.org/x/sys. Those were missing in PR #33399. Signed-off-by: Tobias Klauser --- daemon/daemon_unix.go | 10 +++++----- daemon/graphdriver/devmapper/deviceset.go | 13 ++++++------- daemon/graphdriver/devmapper/mount.go | 13 ++++++------- daemon/graphdriver/quota/projectquota.go | 7 ++----- pkg/idtools/idtools_unix_test.go | 6 +++--- pkg/loopback/loopback.go | 9 +++++---- 6 files changed, 27 insertions(+), 31 deletions(-) diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go index ff9eadf75b..562b7496a7 100644 --- a/daemon/daemon_unix.go +++ b/daemon/daemon_unix.go @@ -14,7 +14,6 @@ import ( "runtime/debug" "strconv" "strings" - "syscall" "time" "github.com/Sirupsen/logrus" @@ -46,6 +45,7 @@ import ( "github.com/opencontainers/selinux/go-selinux/label" "github.com/pkg/errors" "github.com/vishvananda/netlink" + "golang.org/x/sys/unix" ) const ( @@ -146,11 +146,11 @@ func getCPUResources(config containertypes.Resources) (*specs.LinuxCPU, error) { } func getBlkioWeightDevices(config containertypes.Resources) ([]specs.LinuxWeightDevice, error) { - var stat syscall.Stat_t + var stat unix.Stat_t var blkioWeightDevices []specs.LinuxWeightDevice for _, weightDevice := range config.BlkioWeightDevice { - if err := syscall.Stat(weightDevice.Path, &stat); err != nil { + if err := unix.Stat(weightDevice.Path, &stat); err != nil { return nil, err } weight := weightDevice.Weight @@ -219,10 +219,10 @@ func parseSecurityOpt(container *container.Container, config *containertypes.Hos func getBlkioThrottleDevices(devs []*blkiodev.ThrottleDevice) ([]specs.LinuxThrottleDevice, error) { var throttleDevices []specs.LinuxThrottleDevice - var stat syscall.Stat_t + var stat unix.Stat_t for _, d := range devs { - if err := syscall.Stat(d.Path, &stat); err != nil { + if err := unix.Stat(d.Path, &stat); err != nil { return nil, err } d := specs.LinuxThrottleDevice{Rate: d.Rate} diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go index a7e06e1f95..906daf639b 100644 --- a/daemon/graphdriver/devmapper/deviceset.go +++ b/daemon/graphdriver/devmapper/deviceset.go @@ -16,7 +16,6 @@ import ( "strconv" "strings" "sync" - "syscall" "time" "github.com/Sirupsen/logrus" @@ -1521,12 +1520,13 @@ func determineDriverCapabilities(version string) error { // Determine the major and minor number of loopback device func getDeviceMajorMinor(file *os.File) (uint64, uint64, error) { - stat, err := file.Stat() + var stat unix.Stat_t + err := unix.Stat(file.Name(), &stat) if err != nil { return 0, 0, err } - dev := stat.Sys().(*syscall.Stat_t).Rdev + dev := stat.Rdev majorNum := major(dev) minorNum := minor(dev) @@ -1725,18 +1725,17 @@ func (devices *DeviceSet) initDevmapper(doInit bool) (retErr error) { } // Set the device prefix from the device id and inode of the docker root dir - st, err := os.Stat(devices.root) - if err != nil { + var st unix.Stat_t + if err := unix.Stat(devices.root, &st); err != nil { return fmt.Errorf("devmapper: Error looking up dir %s: %s", devices.root, err) } - sysSt := st.Sys().(*syscall.Stat_t) // "reg-" stands for "regular file". // In the future we might use "dev-" for "device file", etc. // docker-maj,min[-inode] stands for: // - Managed by docker // - The target of this device is at major and minor // - If is defined, use that file inside the device as a loopback image. Otherwise use the device itself. - devices.devicePrefix = fmt.Sprintf("docker-%d:%d-%d", major(sysSt.Dev), minor(sysSt.Dev), sysSt.Ino) + devices.devicePrefix = fmt.Sprintf("docker-%d:%d-%d", major(st.Dev), minor(st.Dev), st.Ino) logrus.Debugf("devmapper: Generated prefix: %s", devices.devicePrefix) // Check for the existence of the thin-pool device diff --git a/daemon/graphdriver/devmapper/mount.go b/daemon/graphdriver/devmapper/mount.go index cca1fe1b38..1dc3262d27 100644 --- a/daemon/graphdriver/devmapper/mount.go +++ b/daemon/graphdriver/devmapper/mount.go @@ -7,7 +7,8 @@ import ( "fmt" "os" "path/filepath" - "syscall" + + "golang.org/x/sys/unix" ) // FIXME: this is copy-pasted from the aufs driver. @@ -15,19 +16,17 @@ import ( // Mounted returns true if a mount point exists. func Mounted(mountpoint string) (bool, error) { - mntpoint, err := os.Stat(mountpoint) - if err != nil { + var mntpointSt unix.Stat_t + if err := unix.Stat(mountpoint, &mntpointSt); err != nil { if os.IsNotExist(err) { return false, nil } return false, err } - parent, err := os.Stat(filepath.Join(mountpoint, "..")) - if err != nil { + var parentSt unix.Stat_t + if err := unix.Stat(filepath.Join(mountpoint, ".."), &parentSt); err != nil { return false, err } - mntpointSt := mntpoint.Sys().(*syscall.Stat_t) - parentSt := parent.Sys().(*syscall.Stat_t) return mntpointSt.Dev != parentSt.Dev, nil } diff --git a/daemon/graphdriver/quota/projectquota.go b/daemon/graphdriver/quota/projectquota.go index 194c30e9af..b784dc4afc 100644 --- a/daemon/graphdriver/quota/projectquota.go +++ b/daemon/graphdriver/quota/projectquota.go @@ -52,10 +52,8 @@ import "C" import ( "fmt" "io/ioutil" - "os" "path" "path/filepath" - "syscall" "unsafe" "github.com/Sirupsen/logrus" @@ -323,15 +321,14 @@ func getDirFd(dir *C.DIR) uintptr { // and create a block device node under the home directory // to be used by quotactl commands func makeBackingFsDev(home string) (string, error) { - fileinfo, err := os.Stat(home) - if err != nil { + var stat unix.Stat_t + if err := unix.Stat(home, &stat); err != nil { return "", err } backingFsBlockDev := path.Join(home, "backingFsBlockDev") // Re-create just in case someone copied the home directory over to a new device unix.Unlink(backingFsBlockDev) - stat := fileinfo.Sys().(*syscall.Stat_t) if err := unix.Mknod(backingFsBlockDev, unix.S_IFBLK|0600, int(stat.Dev)); err != nil { return "", fmt.Errorf("Failed to mknod %s: %v", backingFsBlockDev, err) } diff --git a/pkg/idtools/idtools_unix_test.go b/pkg/idtools/idtools_unix_test.go index 31522a547d..2463342a65 100644 --- a/pkg/idtools/idtools_unix_test.go +++ b/pkg/idtools/idtools_unix_test.go @@ -7,10 +7,10 @@ import ( "io/ioutil" "os" "path/filepath" - "syscall" "testing" "github.com/stretchr/testify/require" + "golang.org/x/sys/unix" ) type node struct { @@ -187,8 +187,8 @@ func readTree(base, root string) (map[string]node, error) { } for _, info := range dirInfos { - s := &syscall.Stat_t{} - if err := syscall.Stat(filepath.Join(base, info.Name()), s); err != nil { + s := &unix.Stat_t{} + if err := unix.Stat(filepath.Join(base, info.Name()), s); err != nil { return nil, fmt.Errorf("Can't stat file %q: %v", filepath.Join(base, info.Name()), err) } tree[filepath.Join(root, info.Name())] = node{int(s.Uid), int(s.Gid)} diff --git a/pkg/loopback/loopback.go b/pkg/loopback/loopback.go index c2d91da6f0..36f433d0be 100644 --- a/pkg/loopback/loopback.go +++ b/pkg/loopback/loopback.go @@ -5,9 +5,9 @@ package loopback import ( "fmt" "os" - "syscall" "github.com/Sirupsen/logrus" + "golang.org/x/sys/unix" ) func getLoopbackBackingFile(file *os.File) (uint64, uint64, error) { @@ -31,12 +31,13 @@ func SetCapacity(file *os.File) error { // FindLoopDeviceFor returns a loopback device file for the specified file which // is backing file of a loop back device. func FindLoopDeviceFor(file *os.File) *os.File { - stat, err := file.Stat() + var stat unix.Stat_t + err := unix.Stat(file.Name(), &stat) if err != nil { return nil } - targetInode := stat.Sys().(*syscall.Stat_t).Ino - targetDevice := stat.Sys().(*syscall.Stat_t).Dev + targetInode := stat.Ino + targetDevice := stat.Dev for i := 0; true; i++ { path := fmt.Sprintf("/dev/loop%d", i)