| ... | ... |
@@ -12,7 +12,6 @@ import ( |
| 12 | 12 |
"path/filepath" |
| 13 | 13 |
"strconv" |
| 14 | 14 |
"sync" |
| 15 |
- "syscall" |
|
| 16 | 15 |
"time" |
| 17 | 16 |
) |
| 18 | 17 |
|
| ... | ... |
@@ -344,7 +343,7 @@ func setCloseOnExec(name string) {
|
| 344 | 344 |
if link == name {
|
| 345 | 345 |
fd, err := strconv.Atoi(i.Name()) |
| 346 | 346 |
if err == nil {
|
| 347 |
- SyscallCloseOnExec(fd) |
|
| 347 |
+ sysCloseOnExec(fd) |
|
| 348 | 348 |
} |
| 349 | 349 |
} |
| 350 | 350 |
} |
| ... | ... |
@@ -468,7 +467,7 @@ func (devices *DeviceSet) initDevmapper(doInit bool) error {
|
| 468 | 468 |
if err != nil {
|
| 469 | 469 |
return fmt.Errorf("Error looking up dir %s: %s", devices.root, err)
|
| 470 | 470 |
} |
| 471 |
- sysSt := st.Sys().(*syscall.Stat_t) |
|
| 471 |
+ sysSt := toSysStatT(st.Sys()) |
|
| 472 | 472 |
// "reg-" stands for "regular file". |
| 473 | 473 |
// In the future we might use "dev-" for "device file", etc. |
| 474 | 474 |
// docker-maj,min[-inode] stands for: |
| ... | ... |
@@ -708,15 +707,16 @@ func (devices *DeviceSet) byHash(hash string) (devname string, err error) {
|
| 708 | 708 |
} |
| 709 | 709 |
|
| 710 | 710 |
func (devices *DeviceSet) Shutdown() error {
|
| 711 |
- utils.Debugf("[deviceset %s] shutdown()", devices.devicePrefix)
|
|
| 712 |
- defer utils.Debugf("[deviceset %s] shutdown END", devices.devicePrefix)
|
|
| 713 | 711 |
devices.Lock() |
| 714 |
- utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
|
|
| 715 | 712 |
defer devices.Unlock() |
| 716 | 713 |
|
| 714 |
+ utils.Debugf("[deviceset %s] shutdown()", devices.devicePrefix)
|
|
| 715 |
+ utils.Debugf("[devmapper] Shutting down DeviceSet: %s", devices.root)
|
|
| 716 |
+ defer utils.Debugf("[deviceset %s] shutdown END", devices.devicePrefix)
|
|
| 717 |
+ |
|
| 717 | 718 |
for path, count := range devices.activeMounts {
|
| 718 | 719 |
for i := count; i > 0; i-- {
|
| 719 |
- if err := SyscallUnmount(path, 0); err != nil {
|
|
| 720 |
+ if err := sysUnmount(path, 0); err != nil {
|
|
| 720 | 721 |
utils.Debugf("Shutdown unmounting %s, error: %s\n", path, err)
|
| 721 | 722 |
} |
| 722 | 723 |
} |
| ... | ... |
@@ -752,15 +752,15 @@ func (devices *DeviceSet) MountDevice(hash, path string, readOnly bool) error {
|
| 752 | 752 |
|
| 753 | 753 |
info := devices.Devices[hash] |
| 754 | 754 |
|
| 755 |
- var flags uintptr = syscall.MS_MGC_VAL |
|
| 755 |
+ var flags uintptr = sysMsMgcVal |
|
| 756 | 756 |
|
| 757 | 757 |
if readOnly {
|
| 758 |
- flags = flags | syscall.MS_RDONLY |
|
| 758 |
+ flags = flags | sysMsRdOnly |
|
| 759 | 759 |
} |
| 760 | 760 |
|
| 761 |
- err := SyscallMount(info.DevName(), path, "ext4", flags, "discard") |
|
| 762 |
- if err != nil && err == syscall.EINVAL {
|
|
| 763 |
- err = SyscallMount(info.DevName(), path, "ext4", flags, "") |
|
| 761 |
+ err := sysMount(info.DevName(), path, "ext4", flags, "discard") |
|
| 762 |
+ if err != nil && err == sysEInval {
|
|
| 763 |
+ err = sysMount(info.DevName(), path, "ext4", flags, "") |
|
| 764 | 764 |
} |
| 765 | 765 |
if err != nil {
|
| 766 | 766 |
return fmt.Errorf("Error mounting '%s' on '%s': %s", info.DevName(), path, err)
|
| ... | ... |
@@ -779,7 +779,7 @@ func (devices *DeviceSet) UnmountDevice(hash, path string, deactivate bool) erro |
| 779 | 779 |
defer devices.Unlock() |
| 780 | 780 |
|
| 781 | 781 |
utils.Debugf("[devmapper] Unmount(%s)", path)
|
| 782 |
- if err := SyscallUnmount(path, 0); err != nil {
|
|
| 782 |
+ if err := sysUnmount(path, 0); err != nil {
|
|
| 783 | 783 |
utils.Debugf("\n--->Err: %s\n", err)
|
| 784 | 784 |
return err |
| 785 | 785 |
} |
| ... | ... |
@@ -6,7 +6,6 @@ import ( |
| 6 | 6 |
"github.com/dotcloud/docker/utils" |
| 7 | 7 |
"os" |
| 8 | 8 |
"runtime" |
| 9 |
- "syscall" |
|
| 10 | 9 |
) |
| 11 | 10 |
|
| 12 | 11 |
type DevmapperLogger interface {
|
| ... | ... |
@@ -210,13 +209,13 @@ func FindLoopDeviceFor(file *os.File) *os.File {
|
| 210 | 210 |
if err != nil {
|
| 211 | 211 |
return nil |
| 212 | 212 |
} |
| 213 |
- targetInode := stat.Sys().(*syscall.Stat_t).Ino |
|
| 214 |
- targetDevice := stat.Sys().(*syscall.Stat_t).Dev |
|
| 213 |
+ targetInode := stat.Sys().(*sysStatT).Ino |
|
| 214 |
+ targetDevice := stat.Sys().(*sysStatT).Dev |
|
| 215 | 215 |
|
| 216 | 216 |
for i := 0; true; i++ {
|
| 217 | 217 |
path := fmt.Sprintf("/dev/loop%d", i)
|
| 218 | 218 |
|
| 219 |
- file, err := OSOpenFile(path, os.O_RDWR, 0) |
|
| 219 |
+ file, err := osOpenFile(path, os.O_RDWR, 0) |
|
| 220 | 220 |
if err != nil {
|
| 221 | 221 |
if os.IsNotExist(err) {
|
| 222 | 222 |
return nil |
| ... | ... |
@@ -394,8 +393,8 @@ func getStatus(name string) (uint64, uint64, string, string, error) {
|
| 394 | 394 |
return 0, 0, "", "", fmt.Errorf("Non existing device %s", name)
|
| 395 | 395 |
} |
| 396 | 396 |
|
| 397 |
- _, start, length, target_type, params := task.GetNextTarget(0) |
|
| 398 |
- return start, length, target_type, params, nil |
|
| 397 |
+ _, start, length, targetType, params := task.GetNextTarget(0) |
|
| 398 |
+ return start, length, targetType, params, nil |
|
| 399 | 399 |
} |
| 400 | 400 |
|
| 401 | 401 |
func setTransactionId(poolName string, oldId uint64, newId uint64) error {
|
| ... | ... |
@@ -1,7 +1,6 @@ |
| 1 | 1 |
package devmapper |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
- "syscall" |
|
| 5 | 4 |
"testing" |
| 6 | 5 |
) |
| 7 | 6 |
|
| ... | ... |
@@ -264,7 +263,7 @@ func dmAttachLoopDeviceFail(filename string, fd *int) string {
|
| 264 | 264 |
return "" |
| 265 | 265 |
} |
| 266 | 266 |
|
| 267 |
-func sysGetBlockSizeFail(fd uintptr, size *uint64) syscall.Errno {
|
|
| 267 |
+func sysGetBlockSizeFail(fd uintptr, size *uint64) sysErrno {
|
|
| 268 | 268 |
return 1 |
| 269 | 269 |
} |
| 270 | 270 |
|
| ... | ... |
@@ -140,7 +140,6 @@ static void log_with_errno_init() |
| 140 | 140 |
import "C" |
| 141 | 141 |
|
| 142 | 142 |
import ( |
| 143 |
- "syscall" |
|
| 144 | 143 |
"unsafe" |
| 145 | 144 |
) |
| 146 | 145 |
|
| ... | ... |
@@ -239,23 +238,22 @@ func dmTaskAddTargetFct(task *CDmTask, |
| 239 | 239 |
C.uint64_t(start), C.uint64_t(size), Cttype, Cparams)) |
| 240 | 240 |
} |
| 241 | 241 |
|
| 242 |
-func dmGetLoopbackBackingFile(fd uintptr) (uint64, uint64, syscall.Errno) {
|
|
| 242 |
+func dmGetLoopbackBackingFile(fd uintptr) (uint64, uint64, sysErrno) {
|
|
| 243 | 243 |
var lo64 C.struct_loop_info64 |
| 244 |
- _, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.LOOP_GET_STATUS64, |
|
| 244 |
+ _, _, err := sysSyscall(sysSysIoctl, fd, C.LOOP_GET_STATUS64, |
|
| 245 | 245 |
uintptr(unsafe.Pointer(&lo64))) |
| 246 |
- return uint64(lo64.lo_device), uint64(lo64.lo_inode), err |
|
| 246 |
+ return uint64(lo64.lo_device), uint64(lo64.lo_inode), sysErrno(err) |
|
| 247 | 247 |
} |
| 248 | 248 |
|
| 249 |
-func dmLoopbackSetCapacity(fd uintptr) syscall.Errno {
|
|
| 250 |
- _, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.LOOP_SET_CAPACITY, 0) |
|
| 251 |
- return err |
|
| 249 |
+func dmLoopbackSetCapacity(fd uintptr) sysErrno {
|
|
| 250 |
+ _, _, err := sysSyscall(sysSysIoctl, fd, C.LOOP_SET_CAPACITY, 0) |
|
| 251 |
+ return sysErrno(err) |
|
| 252 | 252 |
} |
| 253 | 253 |
|
| 254 |
-func dmGetBlockSizeFct(fd uintptr) (int64, syscall.Errno) {
|
|
| 254 |
+func dmGetBlockSizeFct(fd uintptr) (int64, sysErrno) {
|
|
| 255 | 255 |
var size int64 |
| 256 |
- _, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64, |
|
| 257 |
- uintptr(unsafe.Pointer(&size))) |
|
| 258 |
- return size, err |
|
| 256 |
+ _, _, err := sysSyscall(sysSysIoctl, fd, C.BLKGETSIZE64, uintptr(unsafe.Pointer(&size))) |
|
| 257 |
+ return size, sysErrno(err) |
|
| 259 | 258 |
} |
| 260 | 259 |
|
| 261 | 260 |
func dmTaskGetInfoFct(task *CDmTask, info *Info) int {
|
| ... | ... |
@@ -275,9 +273,7 @@ func dmTaskGetInfoFct(task *CDmTask, info *Info) int {
|
| 275 | 275 |
return int(C.dm_task_get_info((*C.struct_dm_task)(task), &Cinfo)) |
| 276 | 276 |
} |
| 277 | 277 |
|
| 278 |
-func dmGetNextTargetFct(task *CDmTask, next uintptr, start, length *uint64, |
|
| 279 |
- target, params *string) uintptr {
|
|
| 280 |
- |
|
| 278 |
+func dmGetNextTargetFct(task *CDmTask, next uintptr, start, length *uint64, target, params *string) uintptr {
|
|
| 281 | 279 |
var ( |
| 282 | 280 |
Cstart, Clength C.uint64_t |
| 283 | 281 |
CtargetType, Cparams *C.char |
| ... | ... |
@@ -288,6 +284,7 @@ func dmGetNextTargetFct(task *CDmTask, next uintptr, start, length *uint64, |
| 288 | 288 |
*target = C.GoString(CtargetType) |
| 289 | 289 |
*params = C.GoString(Cparams) |
| 290 | 290 |
}() |
| 291 |
+ |
|
| 291 | 292 |
nextp := C.dm_get_next_target((*C.struct_dm_task)(task), |
| 292 | 293 |
unsafe.Pointer(next), &Cstart, &Clength, &CtargetType, &Cparams) |
| 293 | 294 |
return uintptr(nextp) |
| ... | ... |
@@ -307,10 +304,9 @@ func dmAttachLoopDeviceFct(filename string, fd *int) string {
|
| 307 | 307 |
return C.GoString(ret) |
| 308 | 308 |
} |
| 309 | 309 |
|
| 310 |
-func getBlockSizeFct(fd uintptr, size *uint64) syscall.Errno {
|
|
| 311 |
- _, _, err := SyscallSyscall(syscall.SYS_IOCTL, fd, C.BLKGETSIZE64, |
|
| 312 |
- uintptr(unsafe.Pointer(&size))) |
|
| 313 |
- return err |
|
| 310 |
+func getBlockSizeFct(fd uintptr, size *uint64) sysErrno {
|
|
| 311 |
+ _, _, err := sysSyscall(sysSysIoctl, fd, C.BLKGETSIZE64, uintptr(unsafe.Pointer(&size))) |
|
| 312 |
+ return sysErrno(err) |
|
| 314 | 313 |
} |
| 315 | 314 |
|
| 316 | 315 |
func dmUdevWaitFct(cookie uint) int {
|
| ... | ... |
@@ -3,7 +3,6 @@ package devmapper |
| 3 | 3 |
import ( |
| 4 | 4 |
"os" |
| 5 | 5 |
"path/filepath" |
| 6 |
- "syscall" |
|
| 7 | 6 |
) |
| 8 | 7 |
|
| 9 | 8 |
// FIXME: this is copy-pasted from the aufs driver. |
| ... | ... |
@@ -21,7 +20,7 @@ func Mounted(mountpoint string) (bool, error) {
|
| 21 | 21 |
if err != nil {
|
| 22 | 22 |
return false, err |
| 23 | 23 |
} |
| 24 |
- mntpointSt := mntpoint.Sys().(*syscall.Stat_t) |
|
| 25 |
- parentSt := parent.Sys().(*syscall.Stat_t) |
|
| 24 |
+ mntpointSt := toSysStatT(mntpoint.Sys()) |
|
| 25 |
+ parentSt := toSysStatT(parent.Sys()) |
|
| 26 | 26 |
return mntpointSt.Dev != parentSt.Dev, nil |
| 27 | 27 |
} |
| ... | ... |
@@ -1,15 +1,31 @@ |
| 1 | 1 |
package devmapper |
| 2 | 2 |
|
| 3 |
- |
|
| 4 | 3 |
import ( |
| 4 |
+ "os" |
|
| 5 | 5 |
"syscall" |
| 6 | 6 |
) |
| 7 | 7 |
|
| 8 |
+type ( |
|
| 9 |
+ sysStatT syscall.Stat_t |
|
| 10 |
+ sysErrno syscall.Errno |
|
| 11 |
+) |
|
| 8 | 12 |
|
| 9 | 13 |
var ( |
| 10 |
- SyscallMount = syscall.Mount |
|
| 11 |
- SyscallUnmount = syscall.Unmount |
|
| 12 |
- SyscallCloseOnExec = syscall.CloseOnExec |
|
| 13 |
- SyscallSyscall = syscall.Syscall |
|
| 14 |
- OSOpenFile = os.OpenFile |
|
| 14 |
+ // functions |
|
| 15 |
+ sysMount = syscall.Mount |
|
| 16 |
+ sysUnmount = syscall.Unmount |
|
| 17 |
+ sysCloseOnExec = syscall.CloseOnExec |
|
| 18 |
+ sysSyscall = syscall.Syscall |
|
| 19 |
+ osOpenFile = os.OpenFile |
|
| 15 | 20 |
) |
| 21 |
+ |
|
| 22 |
+const ( |
|
| 23 |
+ sysMsMgcVal = syscall.MS_MGC_VAL |
|
| 24 |
+ sysMsRdOnly = syscall.MS_RDONLY |
|
| 25 |
+ sysEInval = syscall.EINVAL |
|
| 26 |
+ sysSysIoctl = syscall.SYS_IOCTL |
|
| 27 |
+) |
|
| 28 |
+ |
|
| 29 |
+func toSysStatT(i interface{}) *sysStatT {
|
|
| 30 |
+ return (*sysStatT)(i.(*syscall.Stat_t)) |
|
| 31 |
+} |