1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #39327 from tonistiigi/improve-non-cgo

allow dockerd builds without cgo
This commit is contained in:
Brian Goff 2019-06-07 10:07:44 -07:00 committed by GitHub
commit 2b15825d9c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 76 additions and 35 deletions

View file

@ -2,14 +2,6 @@
package copy // import "github.com/docker/docker/daemon/graphdriver/copy" package copy // import "github.com/docker/docker/daemon/graphdriver/copy"
/*
#include <linux/fs.h>
#ifndef FICLONE
#define FICLONE _IOW(0x94, 9, int)
#endif
*/
import "C"
import ( import (
"container/list" "container/list"
"fmt" "fmt"
@ -50,7 +42,7 @@ func copyRegular(srcPath, dstPath string, fileinfo os.FileInfo, copyWithFileRang
defer dstFile.Close() defer dstFile.Close()
if *copyWithFileClone { if *copyWithFileClone {
_, _, err = unix.Syscall(unix.SYS_IOCTL, dstFile.Fd(), C.FICLONE, srcFile.Fd()) err = fiClone(srcFile, dstFile)
if err == nil { if err == nil {
return nil return nil
} }

View file

@ -0,0 +1,22 @@
// +build linux,cgo
package copy // import "github.com/docker/docker/daemon/graphdriver/copy"
/*
#include <linux/fs.h>
#ifndef FICLONE
#define FICLONE _IOW(0x94, 9, int)
#endif
*/
import "C"
import (
"os"
"golang.org/x/sys/unix"
)
func fiClone(srcFile, dstFile *os.File) error {
_, _, err := unix.Syscall(unix.SYS_IOCTL, dstFile.Fd(), C.FICLONE, srcFile.Fd())
return err
}

View file

@ -0,0 +1,13 @@
// +build linux,!cgo
package copy // import "github.com/docker/docker/daemon/graphdriver/copy"
import (
"os"
"golang.org/x/sys/unix"
)
func fiClone(srcFile, dstFile *os.File) error {
return unix.ENOSYS
}

View file

@ -1,4 +1,4 @@
// +build linux // +build linux,!exclude_disk_quota
// //
// projectquota.go - implements XFS project quota controls // projectquota.go - implements XFS project quota controls
@ -63,19 +63,6 @@ import (
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
) )
// Quota limit params - currently we only control blocks hard limit
type Quota struct {
Size uint64
}
// Control - Context to be used by storage driver (e.g. overlay)
// who wants to apply project quotas to container dirs
type Control struct {
backingFsBlockDev string
nextProjectID uint32
quotas map[string]uint32
}
// NewControl - initialize project quota support. // NewControl - initialize project quota support.
// Test to make sure that quota can be set on a test dir and find // Test to make sure that quota can be set on a test dir and find
// the first project id to be used for the next container create. // the first project id to be used for the next container create.

View file

@ -0,0 +1,18 @@
// +build linux,exclude_disk_quota
package quota // import "github.com/docker/docker/daemon/graphdriver/quota"
func NewControl(basePath string) (*Control, error) {
return nil, ErrQuotaNotSupported
}
// SetQuota - assign a unique project id to directory and set the quota limits
// for that project id
func (q *Control) SetQuota(targetPath string, quota Quota) error {
return ErrQuotaNotSupported
}
// GetQuota - get the quota limits of a directory that was configured with SetQuota
func (q *Control) GetQuota(targetPath string, quota *Quota) error {
return ErrQuotaNotSupported
}

View file

@ -0,0 +1,16 @@
// +build linux
package quota // import "github.com/docker/docker/daemon/graphdriver/quota"
// Quota limit params - currently we only control blocks hard limit
type Quota struct {
Size uint64
}
// Control - Context to be used by storage driver (e.g. overlay)
// who wants to apply project quotas to container dirs
type Control struct {
backingFsBlockDev string
nextProjectID uint32
quotas map[string]uint32
}

View file

@ -9,13 +9,9 @@ import (
"strings" "strings"
"github.com/opencontainers/runc/libcontainer/system" "github.com/opencontainers/runc/libcontainer/system"
"golang.org/x/sys/unix"
) )
/*
#include <unistd.h>
*/
import "C"
// platformNewStatsCollector performs platform specific initialisation of the // platformNewStatsCollector performs platform specific initialisation of the
// Collector structure. // Collector structure.
func platformNewStatsCollector(s *Collector) { func platformNewStatsCollector(s *Collector) {
@ -70,13 +66,10 @@ func (s *Collector) getSystemCPUUsage() (uint64, error) {
} }
func (s *Collector) getNumberOnlineCPUs() (uint32, error) { func (s *Collector) getNumberOnlineCPUs() (uint32, error) {
i, err := C.sysconf(C._SC_NPROCESSORS_ONLN) var cpuset unix.CPUSet
// According to POSIX - errno is undefined after successful err := unix.SchedGetaffinity(0, &cpuset)
// sysconf, and can be non-zero in several cases, so look for if err != nil {
// error in returned value not in errno.
// (https://sourceware.org/bugzilla/show_bug.cgi?id=21536)
if i == -1 {
return 0, err return 0, err
} }
return uint32(i), nil return uint32(cpuset.Count()), nil
} }