Messages in this thread | | | From | Arnd Bergmann <> | Subject | Re: [PATCH v2] Add preadv and pwritev system calls. | Date | Fri, 12 Dec 2008 20:47:30 +0100 |
| |
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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |