Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
* sysdeps/unix/sysv/linux/readv.c (__libc_readv): Fix calling of
	compatibility code.
	* sysdeps/unix/sysv/linux/writev.c (__libc_writev): Likewise.

2009-04-01  Ulrich Drepper  <drepper@redhat.com>
  • Loading branch information
Ulrich Drepper committed Apr 3, 2009
1 parent 2dbe6af commit 7166c77
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 51 deletions.
6 changes: 5 additions & 1 deletion ChangeLog
@@ -1,5 +1,9 @@
2009-04-03 Ulrich Drepper <drepper@redhat.com>

* sysdeps/unix/sysv/linux/readv.c (__libc_readv): Fix calling of
compatibility code.
* sysdeps/unix/sysv/linux/writev.c (__libc_writev): Likewise.

* sysdeps/unix/sysv/linux/kernel-features.h: Define
__ASSUME_COMPLETE_READV_WRITEV.
* sysdeps/unix/sysv/linux/readv.c: No need for userlevel fallback
Expand Down Expand Up @@ -41,7 +45,7 @@
(R_SPARC_NUM): Update.
From Dave Miller <davem@davemloft.net>.

c2009-04-01 Ulrich Drepper <drepper@redhat.com>
2009-04-01 Ulrich Drepper <drepper@redhat.com>

* sysdeps/unix/sysv/linux/sys/eventfd.h (EFD_SEMAPHORE): Define.

Expand Down
41 changes: 16 additions & 25 deletions sysdeps/unix/sysv/linux/readv.c
Expand Up @@ -37,42 +37,33 @@ static ssize_t __atomic_readv_replacement (int, __const struct iovec *,
#endif


/* We should deal with kernel which have a smaller UIO_FASTIOV as well
as a very big count. */
static ssize_t
do_readv (int fd, const struct iovec *vector, int count)
{
ssize_t bytes_read;

bytes_read = INLINE_SYSCALL (readv, 3, fd, CHECK_N (vector, count), count);

#ifdef __ASSUME_COMPLETE_READV_WRITEV
return bytes_read;
#else
if (bytes_read >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return bytes_read;

return __atomic_readv_replacement (fd, vector, count);
#endif
}


ssize_t
__libc_readv (fd, vector, count)
int fd;
const struct iovec *vector;
int count;
{
if (SINGLE_THREAD_P)
return do_readv (fd, vector, count);
ssize_t result;

int oldtype = LIBC_CANCEL_ASYNC ();
if (SINGLE_THREAD_P)
result = INLINE_SYSCALL (readv, 3, fd, CHECK_N (vector, count), count);
else
{
int oldtype = LIBC_CANCEL_ASYNC ();

int result = do_readv (fd, vector, count);
result = INLINE_SYSCALL (readv, 3, fd, CHECK_N (vector, count), count);

LIBC_CANCEL_RESET (oldtype);
LIBC_CANCEL_RESET (oldtype);
}

#ifdef __ASSUME_COMPLETE_READV_WRITEV
return result;
#else
if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return result;

return __atomic_readv_replacement (fd, vector, count);
#endif
}
strong_alias (__libc_readv, __readv)
weak_alias (__libc_readv, readv)
Expand Down
41 changes: 16 additions & 25 deletions sysdeps/unix/sysv/linux/writev.c
Expand Up @@ -37,42 +37,33 @@ static ssize_t __atomic_writev_replacement (int, const struct iovec *,
#endif


/* We should deal with kernel which have a smaller UIO_FASTIOV as well
as a very big count. */
static ssize_t
do_writev (int fd, const struct iovec *vector, int count)
{
ssize_t bytes_written;

bytes_written = INLINE_SYSCALL (writev, 3, fd, CHECK_N (vector, count),
count);

#ifdef __ASSUME_COMPLETE_READV_WRITEV
return bytes_written;
#else
if (bytes_written >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return bytes_written;

return __atomic_writev_replacement (fd, vector, count);
#endif
}

ssize_t
__libc_writev (fd, vector, count)
int fd;
const struct iovec *vector;
int count;
{
if (SINGLE_THREAD_P)
return do_writev (fd, vector, count);
ssize_t result;

int oldtype = LIBC_CANCEL_ASYNC ();
if (SINGLE_THREAD_P)
result = INLINE_SYSCALL (writev, 3, fd, CHECK_N (vector, count), count);
else
{
int oldtype = LIBC_CANCEL_ASYNC ();

ssize_t result = do_writev (fd, vector, count);
result = INLINE_SYSCALL (writev, 3, fd, CHECK_N (vector, count), count);

LIBC_CANCEL_RESET (oldtype);
LIBC_CANCEL_RESET (oldtype);
}

#ifdef __ASSUME_COMPLETE_READV_WRITEV
return result;
#else
if (result >= 0 || errno != EINVAL || count <= UIO_FASTIOV)
return result;

return __atomic_writev_replacement (fd, vector, count);
#endif
}
strong_alias (__libc_writev, __writev)
weak_alias (__libc_writev, writev)
Expand Down

0 comments on commit 7166c77

Please sign in to comment.