User: Password:
|
|
Subscribe / Log in / New account

Re: [PATCH v2] Add preadv and pwritev system calls.

From:  Arnd Bergmann <arnd-AT-arndb.de>
To:  Matthew Wilcox <matthew-AT-wil.cx>
Subject:  Re: [PATCH v2] Add preadv and pwritev system calls.
Date:  Fri, 12 Dec 2008 20:47:30 +0100
Message-ID:  <200812122047.31405.arnd@arndb.de>
Cc:  Gerd Hoffmann <kraxel-AT-redhat.com>, linux-kernel-AT-vger.kernel.org, linux-arch-AT-vger.kernel.org
Archive-link:  Article

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 <><


(Log in to post comments)


Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds