Commit ef7df33c authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] fix sendfile on 64bit architectures

From: Andi Kleen <ak@suse.de>

sys_sendfile has a hardcoded 2GB limit.  64bit architectures should
probably always use sys_sendfile64() in their native system tables, because
for them sizeof(off_t) == sizeof(loff_t).  This patch does this.  It seemed
easier to just change the 64bit entry tables instead of fixing up all the
emulation layers to do 2GB checks on their own.

I changed all 64bit architectures except for parisc64, which seemed to
already have a sendfile64.
parent 7c0e6555
...@@ -389,7 +389,7 @@ sys_call_table: ...@@ -389,7 +389,7 @@ sys_call_table:
.quad sys_getcwd .quad sys_getcwd
.quad sys_capget .quad sys_capget
.quad sys_capset .quad sys_capset
.quad sys_sendfile /* 370 */ .quad sys_sendfile64 /* 370 */
.quad sys_setresgid .quad sys_setresgid
.quad sys_getresgid .quad sys_getresgid
.quad sys_ni_syscall /* sys_dipc */ .quad sys_ni_syscall /* sys_dipc */
......
...@@ -1429,7 +1429,7 @@ sys_call_table: ...@@ -1429,7 +1429,7 @@ sys_call_table:
data8 sys_getcwd data8 sys_getcwd
data8 sys_capget // 1185 data8 sys_capget // 1185
data8 sys_capset data8 sys_capset
data8 sys_sendfile data8 sys_sendfile64
data8 sys_ni_syscall // sys_getpmsg (STREAMS) data8 sys_ni_syscall // sys_getpmsg (STREAMS)
data8 sys_ni_syscall // sys_putpmsg (STREAMS) data8 sys_ni_syscall // sys_putpmsg (STREAMS)
data8 sys_socket // 1190 data8 sys_socket // 1190
......
...@@ -250,7 +250,7 @@ sys_call_table: ...@@ -250,7 +250,7 @@ sys_call_table:
PTR sys_setitimer PTR sys_setitimer
PTR sys_alarm PTR sys_alarm
PTR sys_getpid PTR sys_getpid
PTR sys_sendfile PTR sys_sendfile64
PTR sys_socket /* 5040 */ PTR sys_socket /* 5040 */
PTR sys_connect PTR sys_connect
PTR sys_accept PTR sys_accept
......
...@@ -1040,7 +1040,7 @@ _GLOBAL(sys_call_table) ...@@ -1040,7 +1040,7 @@ _GLOBAL(sys_call_table)
.llong .sys_capget .llong .sys_capget
.llong .sys_capset .llong .sys_capset
.llong .sys_sigaltstack /* 185 */ .llong .sys_sigaltstack /* 185 */
.llong .sys_sendfile .llong .sys_sendfile64
.llong .sys_ni_syscall /* reserved for streams1 */ .llong .sys_ni_syscall /* reserved for streams1 */
.llong .sys_ni_syscall /* reserved for streams2 */ .llong .sys_ni_syscall /* reserved for streams2 */
.llong .sys_vfork .llong .sys_vfork
......
...@@ -195,7 +195,7 @@ SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper) ...@@ -195,7 +195,7 @@ SYSCALL(sys_getcwd,sys_getcwd,sys32_getcwd_wrapper)
SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper) SYSCALL(sys_capget,sys_capget,sys32_capget_wrapper)
SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper) /* 185 */ SYSCALL(sys_capset,sys_capset,sys32_capset_wrapper) /* 185 */
SYSCALL(sys_sigaltstack_glue,sys_sigaltstack_glue,sys32_sigaltstack_glue) SYSCALL(sys_sigaltstack_glue,sys_sigaltstack_glue,sys32_sigaltstack_glue)
SYSCALL(sys_sendfile,sys_sendfile,sys32_sendfile_wrapper) SYSCALL(sys_sendfile,sys_sendfile64,sys32_sendfile_wrapper)
NI_SYSCALL /* streams1 */ NI_SYSCALL /* streams1 */
NI_SYSCALL /* streams2 */ NI_SYSCALL /* streams2 */
SYSCALL(sys_vfork_glue,sys_vfork_glue,sys_vfork_glue) /* 190 */ SYSCALL(sys_vfork_glue,sys_vfork_glue,sys_vfork_glue) /* 190 */
......
...@@ -90,7 +90,7 @@ sys_call_table: ...@@ -90,7 +90,7 @@ sys_call_table:
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid, sys_getuid /*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid, sys_getuid
/*25*/ .word sys_nis_syscall, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall /*25*/ .word sys_nis_syscall, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall
/*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice /*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice
.word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile .word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile64
/*40*/ .word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall /*40*/ .word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall
.word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid .word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid
/*50*/ .word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl /*50*/ .word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl
......
...@@ -98,7 +98,7 @@ __SYSCALL(__NR_setitimer, sys_setitimer) ...@@ -98,7 +98,7 @@ __SYSCALL(__NR_setitimer, sys_setitimer)
__SYSCALL(__NR_getpid, sys_getpid) __SYSCALL(__NR_getpid, sys_getpid)
#define __NR_sendfile 40 #define __NR_sendfile 40
__SYSCALL(__NR_sendfile, sys_sendfile) __SYSCALL(__NR_sendfile, sys_sendfile64)
#define __NR_socket 41 #define __NR_socket 41
__SYSCALL(__NR_socket, sys_socket) __SYSCALL(__NR_socket, sys_socket)
#define __NR_connect 42 #define __NR_connect 42
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment