On Friday 12 December 2008, Matthew Wilcox wrote: > Things will go much better if we can prototype these as: > > asmlinkage ssize_t sys_preadv(unsigned int fd, const struct iovec __user *vec, > loff_t pos, unsigned long vlen); > asmlinkage ssize_t sys_pwritev(unsigned int fd, const struct iovec __user *vec, > loff_t pos, unsigned long vlen); I would vote for doing it the same way as sys_llseek, which avoids this issue entirely by passing the upper half of pos sepearately: asmlinkage ssize_t sys_preadv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen, unsigned long pos_high, unsigned long pos_low); asmlinkage ssize_t sys_pwritev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen, unsigned long pos_high, unsigned long pos_low); This is the only way I can see that lets us use a shared compat_sys_preadv/pwritev across all 64 bit architectures. The libc can then add a trivial wrapper around the syscalls to get the regular calling conventions. Aside from that, have you considered doing something even more flexible, like this? struct piovec { void __user *iov_base; __kernel_size_t iov_len; __kernel_loff_t pos; }; asmlinkage ssize_t sys_pwritev(unsigned long fd, const struct piovec __user *vec, unsigned long vlen); Arnd <>< -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html