Browse code

Remove all syscall calls from devicemapper

Guillaume J. Charmes authored on 2013/11/21 05:49:01
Showing 6 changed files
... ...
@@ -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
+}