Re: [PATCH v6 0/5] Add preadv & pwritev system calls.

From: Ulrich Drepper
Date: Fri Jan 16 2009 - 14:20:53 EST

Hash: SHA1

Arnd Bergmann wrote:
> Did you get any feedback from Ulrich
> Drepper as to whether he plans to add support to glibc?

If they are in the kernel there is no reason not to export them from
glibc. But I have a general comment about all kinds of read syscalls.
If think they have been misdesigned from day one and if we are going to
add new ones we might want to fix them.

The problem is that they don't allow for zero-copy operations in enough
cases. The kernel is not free to store the data wherever it wants even
if the userlevel code is fine with that. Ideally the program would tell
the kernel that it is fine with any addressable address and provides a
buffer for the kernel to use in case zero-copy into that buffer is
possible or no zero-copy is possible at all. An interface could look
like this:

ssize_t readz (int fd, void *buf, size_t len, void **res)

(and accordingly for similar calls). The application will then use the
pointer stored at the address pointed to by the fourth parameter instead
of unconditionally using the buffer pointed to by the second parameter.
For res==NULL the semantics could be the same as the normal read().

This is not the only interface needed to make this work. Somehow the
memory used for the zero-copy buffers has to be administrated. At the
very least an interface to mark the buffer returned by readz() as unused
is needed.

There is a lot to think about before this can be done (something I
started back in my 2006 OLS paper [1]). But I wonder whether it's worth
preparing for it and not add yet more interfaces which aren't ready for
this type of I/O.


- --
â Ulrich Drepper â Red Hat, Inc. â 444 Castro St â Mountain View, CA â
Version: GnuPG v1.4.9 (GNU/Linux)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at