mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
6558158dc3
Instead of implementing refcounts at each graphdriver, implement this in
the layer package which is what the engine actually interacts with now.
This means interacting directly with the graphdriver is no longer
explicitly safe with regard to Get/Put calls being refcounted.
In addition, with the containerd, layers may still be mounted after
a daemon restart since we will no longer explicitly kill containers when
we shutdown or startup engine.
Because of this ref counts would need to be repopulated.
Signed-off-by: Brian Goff <cpuguy83@gmail.com>
(cherry picked from commit 65d79e3e5e
)
99 lines
2.8 KiB
Go
99 lines
2.8 KiB
Go
// +build linux
|
|
|
|
package graphdriver
|
|
|
|
import (
|
|
"path/filepath"
|
|
"syscall"
|
|
)
|
|
|
|
const (
|
|
// FsMagicAufs filesystem id for Aufs
|
|
FsMagicAufs = FsMagic(0x61756673)
|
|
// FsMagicBtrfs filesystem id for Btrfs
|
|
FsMagicBtrfs = FsMagic(0x9123683E)
|
|
// FsMagicCramfs filesystem id for Cramfs
|
|
FsMagicCramfs = FsMagic(0x28cd3d45)
|
|
// FsMagicExtfs filesystem id for Extfs
|
|
FsMagicExtfs = FsMagic(0x0000EF53)
|
|
// FsMagicF2fs filesystem id for F2fs
|
|
FsMagicF2fs = FsMagic(0xF2F52010)
|
|
// FsMagicGPFS filesystem id for GPFS
|
|
FsMagicGPFS = FsMagic(0x47504653)
|
|
// FsMagicJffs2Fs filesystem if for Jffs2Fs
|
|
FsMagicJffs2Fs = FsMagic(0x000072b6)
|
|
// FsMagicJfs filesystem id for Jfs
|
|
FsMagicJfs = FsMagic(0x3153464a)
|
|
// FsMagicNfsFs filesystem id for NfsFs
|
|
FsMagicNfsFs = FsMagic(0x00006969)
|
|
// FsMagicRAMFs filesystem id for RamFs
|
|
FsMagicRAMFs = FsMagic(0x858458f6)
|
|
// FsMagicReiserFs filesystem id for ReiserFs
|
|
FsMagicReiserFs = FsMagic(0x52654973)
|
|
// FsMagicSmbFs filesystem id for SmbFs
|
|
FsMagicSmbFs = FsMagic(0x0000517B)
|
|
// FsMagicSquashFs filesystem id for SquashFs
|
|
FsMagicSquashFs = FsMagic(0x73717368)
|
|
// FsMagicTmpFs filesystem id for TmpFs
|
|
FsMagicTmpFs = FsMagic(0x01021994)
|
|
// FsMagicVxFS filesystem id for VxFs
|
|
FsMagicVxFS = FsMagic(0xa501fcf5)
|
|
// FsMagicXfs filesystem id for Xfs
|
|
FsMagicXfs = FsMagic(0x58465342)
|
|
// FsMagicZfs filesystem id for Zfs
|
|
FsMagicZfs = FsMagic(0x2fc12fc1)
|
|
// FsMagicOverlay filesystem id for overlay
|
|
FsMagicOverlay = FsMagic(0x794C7630)
|
|
)
|
|
|
|
var (
|
|
// Slice of drivers that should be used in an order
|
|
priority = []string{
|
|
"aufs",
|
|
"btrfs",
|
|
"zfs",
|
|
"devicemapper",
|
|
"overlay",
|
|
"vfs",
|
|
}
|
|
|
|
// FsNames maps filesystem id to name of the filesystem.
|
|
FsNames = map[FsMagic]string{
|
|
FsMagicAufs: "aufs",
|
|
FsMagicBtrfs: "btrfs",
|
|
FsMagicCramfs: "cramfs",
|
|
FsMagicExtfs: "extfs",
|
|
FsMagicF2fs: "f2fs",
|
|
FsMagicGPFS: "gpfs",
|
|
FsMagicJffs2Fs: "jffs2",
|
|
FsMagicJfs: "jfs",
|
|
FsMagicNfsFs: "nfs",
|
|
FsMagicRAMFs: "ramfs",
|
|
FsMagicReiserFs: "reiserfs",
|
|
FsMagicSmbFs: "smb",
|
|
FsMagicSquashFs: "squashfs",
|
|
FsMagicTmpFs: "tmpfs",
|
|
FsMagicUnsupported: "unsupported",
|
|
FsMagicVxFS: "vxfs",
|
|
FsMagicXfs: "xfs",
|
|
FsMagicZfs: "zfs",
|
|
}
|
|
)
|
|
|
|
// GetFSMagic returns the filesystem id given the path.
|
|
func GetFSMagic(rootpath string) (FsMagic, error) {
|
|
var buf syscall.Statfs_t
|
|
if err := syscall.Statfs(filepath.Dir(rootpath), &buf); err != nil {
|
|
return 0, err
|
|
}
|
|
return FsMagic(buf.Type), nil
|
|
}
|
|
|
|
// Mounted checks if the given path is mounted as the fs type
|
|
func Mounted(fsType FsMagic, mountPath string) (bool, error) {
|
|
var buf syscall.Statfs_t
|
|
if err := syscall.Statfs(mountPath, &buf); err != nil {
|
|
return false, err
|
|
}
|
|
return FsMagic(buf.Type) == fsType, nil
|
|
}
|