Skip to content
This repository was archived by the owner on Oct 13, 2023. It is now read-only.

Commit 4570882

Browse files
authored
Merge pull request #347 from kolyshkin/19.03-loopback-idx
[19.03 backport] Use correct `LOOP_CTL_GET_FREE` API in `pkg/loopback` Upstream-commit: 81fcfc67cdbee2ea1ca4fe45d4e921e39de40554 Component: engine
2 parents 34c442a + 35c266f commit 4570882

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

components/engine/pkg/loopback/ioctl.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ import (
99
)
1010

1111
func ioctlLoopCtlGetFree(fd uintptr) (int, error) {
12-
index, err := unix.IoctlGetInt(int(fd), LoopCtlGetFree)
13-
if err != nil {
12+
// The ioctl interface for /dev/loop-control (since Linux 3.1) is a bit
13+
// off compared to what you'd expect: instead of writing an integer to a
14+
// parameter pointer like unix.IoctlGetInt() expects, it returns the first
15+
// available loop device index directly.
16+
ioctlReturn, _, err := unix.Syscall(unix.SYS_IOCTL, fd, LoopCtlGetFree, 0)
17+
if err != 0 {
1418
return 0, err
1519
}
16-
return index, nil
20+
return int(ioctlReturn), nil
1721
}
1822

1923
func ioctlLoopSetFd(loopFd, sparseFd uintptr) error {

0 commit comments

Comments
 (0)