On Fri, Dec 12, 2008 at 03:00:40PM +0100, Gerd Hoffmann wrote: > This patch adds preadv and pwritev system calls. These syscalls are a > pretty straightforward combination of pread and readv (same for write). > They are quite useful for doing vectored I/O in threaded applications. > Using lseek+readv instead opens race windows you'll have to plug with > locking. > > Other systems have such system calls too, for example NetBSD, check > here: http://www.daemon-systems.org/man/preadv.2.html > > The patch sports the actual system call implementation and the windup in > the x86 system call tables. Other archs are TBD. > +asmlinkage ssize_t sys_preadv(unsigned long fd, const struct iovec __user *vec, > + unsigned long vlen, loff_t pos) > +asmlinkage ssize_t sys_pwritev(unsigned long fd, const struct iovec __user *vec, > + unsigned long vlen, loff_t pos) As so often before the devil is in the function prototype. On some architectures - 32-bit MIPS and PARISC, maybe others - 64-bit arguments such as loff_t need to be passed in an _aligned_ pair of 32-bit arguments which effectivly requires another wrapper like this around your compat wrapper: asmlinkage int sys32_preadv(unsigned long fd, const struct compat_iovec __user *vec, unsigned long vlen, int dummy, unsigned a5, unsigned a6) { return compat_sys_preadv(fd, vec, vlen, merge_64(a5, a6)); } merge_64() takes two 32-bit halves of a 64-bit argument and combines them into a 64-bit argument again. I wonder, does that merging happen magically on x86 or? Ralf -- 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