diff --git a/daemon/graphdriver/driver.go b/daemon/graphdriver/driver.go index 399a0503c9..963acdfbb1 100644 --- a/daemon/graphdriver/driver.go +++ b/daemon/graphdriver/driver.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" "os" - "path" + "path/filepath" "strings" "github.com/Sirupsen/logrus" @@ -14,60 +14,17 @@ import ( type FsMagic uint32 const ( - FsMagicAufs = FsMagic(0x61756673) - FsMagicBtrfs = FsMagic(0x9123683E) - FsMagicCramfs = FsMagic(0x28cd3d45) - FsMagicExtfs = FsMagic(0x0000EF53) - FsMagicF2fs = FsMagic(0xF2F52010) - FsMagicJffs2Fs = FsMagic(0x000072b6) - FsMagicJfs = FsMagic(0x3153464a) - FsMagicNfsFs = FsMagic(0x00006969) - FsMagicRamFs = FsMagic(0x858458f6) - FsMagicReiserFs = FsMagic(0x52654973) - FsMagicSmbFs = FsMagic(0x0000517B) - FsMagicSquashFs = FsMagic(0x73717368) - FsMagicTmpFs = FsMagic(0x01021994) FsMagicUnsupported = FsMagic(0x00000000) - FsMagicXfs = FsMagic(0x58465342) - FsMagicZfs = FsMagic(0x2fc12fc1) ) var ( DefaultDriver string // All registred drivers drivers map[string]InitFunc - // Slice of drivers that should be used in an order - priority = []string{ - "aufs", - "btrfs", - "zfs", - "devicemapper", - "overlay", - "vfs", - } ErrNotSupported = errors.New("driver not supported") ErrPrerequisites = errors.New("prerequisites for driver not satisfied (wrong filesystem?)") ErrIncompatibleFS = fmt.Errorf("backing file system is unsupported for this graph driver") - - FsNames = map[FsMagic]string{ - FsMagicAufs: "aufs", - FsMagicBtrfs: "btrfs", - FsMagicCramfs: "cramfs", - FsMagicExtfs: "extfs", - FsMagicF2fs: "f2fs", - FsMagicJffs2Fs: "jffs2", - FsMagicJfs: "jfs", - FsMagicNfsFs: "nfs", - FsMagicRamFs: "ramfs", - FsMagicReiserFs: "reiserfs", - FsMagicSmbFs: "smb", - FsMagicSquashFs: "squashfs", - FsMagicTmpFs: "tmpfs", - FsMagicUnsupported: "unsupported", - FsMagicXfs: "xfs", - FsMagicZfs: "zfs", - } ) type InitFunc func(root string, options []string) (Driver, error) @@ -139,7 +96,7 @@ func Register(name string, initFunc InitFunc) error { func GetDriver(name, home string, options []string) (Driver, error) { if initFunc, exists := drivers[name]; exists { - return initFunc(path.Join(home, name), options) + return initFunc(filepath.Join(home, name), options) } return nil, ErrNotSupported } @@ -210,7 +167,7 @@ func New(root string, options []string) (driver Driver, err error) { func scanPriorDrivers(root string) []string { priorDrivers := []string{} for driver := range drivers { - p := path.Join(root, driver) + p := filepath.Join(root, driver) if _, err := os.Stat(p); err == nil { priorDrivers = append(priorDrivers, driver) } @@ -222,7 +179,7 @@ func checkPriorDriver(name, root string) error { priorDrivers := []string{} for _, prior := range scanPriorDrivers(root) { if prior != name && prior != "vfs" { - if _, err := os.Stat(path.Join(root, prior)); err == nil { + if _, err := os.Stat(filepath.Join(root, prior)); err == nil { priorDrivers = append(priorDrivers, prior) } } diff --git a/daemon/graphdriver/driver_linux.go b/daemon/graphdriver/driver_linux.go index acf96d1b40..88d88e2615 100644 --- a/daemon/graphdriver/driver_linux.go +++ b/daemon/graphdriver/driver_linux.go @@ -1,13 +1,64 @@ +// +build linux + package graphdriver import ( - "path" + "path/filepath" "syscall" ) +const ( + FsMagicAufs = FsMagic(0x61756673) + FsMagicBtrfs = FsMagic(0x9123683E) + FsMagicCramfs = FsMagic(0x28cd3d45) + FsMagicExtfs = FsMagic(0x0000EF53) + FsMagicF2fs = FsMagic(0xF2F52010) + FsMagicJffs2Fs = FsMagic(0x000072b6) + FsMagicJfs = FsMagic(0x3153464a) + FsMagicNfsFs = FsMagic(0x00006969) + FsMagicRamFs = FsMagic(0x858458f6) + FsMagicReiserFs = FsMagic(0x52654973) + FsMagicSmbFs = FsMagic(0x0000517B) + FsMagicSquashFs = FsMagic(0x73717368) + FsMagicTmpFs = FsMagic(0x01021994) + FsMagicXfs = FsMagic(0x58465342) + FsMagicZfs = FsMagic(0x2fc12fc1) +) + +var ( + // Slice of drivers that should be used in an order + priority = []string{ + "aufs", + "btrfs", + "zfs", + "devicemapper", + "overlay", + "vfs", + } + + FsNames = map[FsMagic]string{ + FsMagicAufs: "aufs", + FsMagicBtrfs: "btrfs", + FsMagicCramfs: "cramfs", + FsMagicExtfs: "extfs", + FsMagicF2fs: "f2fs", + FsMagicJffs2Fs: "jffs2", + FsMagicJfs: "jfs", + FsMagicNfsFs: "nfs", + FsMagicRamFs: "ramfs", + FsMagicReiserFs: "reiserfs", + FsMagicSmbFs: "smb", + FsMagicSquashFs: "squashfs", + FsMagicTmpFs: "tmpfs", + FsMagicUnsupported: "unsupported", + FsMagicXfs: "xfs", + FsMagicZfs: "zfs", + } +) + func GetFSMagic(rootpath string) (FsMagic, error) { var buf syscall.Statfs_t - if err := syscall.Statfs(path.Dir(rootpath), &buf); err != nil { + if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil { return 0, err } return FsMagic(buf.Type), nil diff --git a/daemon/graphdriver/driver_unsupported.go b/daemon/graphdriver/driver_unsupported.go index 27933b6d66..3f36864878 100644 --- a/daemon/graphdriver/driver_unsupported.go +++ b/daemon/graphdriver/driver_unsupported.go @@ -1,7 +1,14 @@ -// +build !linux +// +build !linux,!windows package graphdriver +var ( + // Slice of drivers that should be used in an order + priority = []string{ + "unsupported", + } +) + func GetFSMagic(rootpath string) (FsMagic, error) { return FsMagicUnsupported, nil } diff --git a/daemon/graphdriver/driver_windows.go b/daemon/graphdriver/driver_windows.go new file mode 100644 index 0000000000..3ba09781d4 --- /dev/null +++ b/daemon/graphdriver/driver_windows.go @@ -0,0 +1,26 @@ +package graphdriver + +type DiffDiskDriver interface { + Driver + CopyDiff(id, sourceId string) error +} + +const ( + FsMagicWindows = FsMagic(0xa1b1830f) +) + +var ( + // Slice of drivers that should be used in an order + priority = []string{ + "windows", + } + + FsNames = map[FsMagic]string{ + FsMagicWindows: "windows", + FsMagicUnsupported: "unsupported", + } +) + +func GetFSMagic(rootpath string) (FsMagic, error) { + return FsMagicWindows, nil +}