mirror of
https://github.com/rwinkhart/sys.git
synced 2026-08-30 22:06:37 -04:00
unix: correct argument order for SyncFileRange syscall on linux/ppc64{,le}
On linux/ppc64{,le} the SYS_SYNC_FILE_RANGE2 syscall is used to
implement SyncFileRange. This syscall has a different argument order
than SYS_SYNC_FILE_RANGE. Apart from that the implementations of both
syscalls are the same, so use a simple wrapper to invoke the syscall
with the correct argument order.
For context see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=edd5cd4a9424f22b0fa08bef5e299d41befd5622
Fixes golang/go#27485
Change-Id: Idc154eab7b7c521a34de821e1d1a97095e96fed0
Reviewed-on: https://go-review.googlesource.com/133215
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
committed by
Tobias Klauser
parent
2b024373dc
commit
d9c697bf0b
@@ -7,6 +7,7 @@
|
||||
package unix_test
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
@@ -441,3 +442,26 @@ func TestFaccessat(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestSyncFileRange(t *testing.T) {
|
||||
file, err := ioutil.TempFile("", "TestSyncFileRange")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer os.Remove(file.Name())
|
||||
defer file.Close()
|
||||
|
||||
err = unix.SyncFileRange(int(file.Fd()), 0, 0, 0)
|
||||
if err == unix.ENOSYS || err == unix.EPERM {
|
||||
t.Skip("sync_file_range syscall is not available, skipping test")
|
||||
} else if err != nil {
|
||||
t.Fatalf("SyncFileRange: %v", err)
|
||||
}
|
||||
|
||||
// invalid flags
|
||||
flags := 0xf00
|
||||
err = unix.SyncFileRange(int(file.Fd()), 0, 0, flags)
|
||||
if err != unix.EINVAL {
|
||||
t.Fatalf("SyncFileRange: unexpected error: %v, want EINVAL", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user