The posix_madvise(3) and posix_fadvise(2) should return error on

failure, same as posix_fallocate(2).

Noted by:	Bob Bishop <rb@gid.co.uk>
Discussed with:	bde
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2014-01-30 18:04:39 +00:00
parent 4524013cd3
commit 49d39308ba
6 changed files with 27 additions and 12 deletions

View File

@ -8,9 +8,19 @@
__FBSDID("$FreeBSD$");
#include <sys/mman.h>
#include <errno.h>
int
posix_madvise(void *address, size_t size, int how)
{
return madvise(address, size, how);
int ret, saved_errno;
saved_errno = errno;
if (madvise(address, size, how) == -1) {
ret = errno;
errno = saved_errno;
} else {
ret = 0;
}
return (ret);
}

View File

@ -28,7 +28,7 @@
.\" @(#)madvise.2 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
.Dd July 19, 1996
.Dd January 30, 2014
.Dt MADVISE 2
.Os
.Sh NAME
@ -50,7 +50,10 @@ allows a process that has knowledge of its memory behavior
to describe it to the system.
The
.Fn posix_madvise
interface is identical and is provided for standards conformance.
interface is identical, except it returns an error number on error and does
not modify
.Va errno ,
and is provided for standards conformance.
.Pp
The known behaviors are:
.Bl -tag -width MADV_SEQUENTIAL

View File

@ -28,7 +28,7 @@
.\" @(#)madvise.2 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
.Dd June 19, 2012
.Dd January 30, 2014
.Dt POSIX_FADVISE 2
.Os
.Sh NAME
@ -93,7 +93,7 @@ Future access to this data may require a read operation.
.Sh ERRORS
The
.Fn posix_fadvise
system call will fail if:
system call returns zero on success, and an error on failure:
.Bl -tag -width Er
.It Bq Er EBADF
The

View File

@ -83,9 +83,8 @@ that reduces the file size to a size smaller than
If successful,
.Fn posix_fallocate
returns zero.
It returns error number on failure, without setting
.Va errno
variable.
It returns an error on failure, without setting
.Va errno .
.Sh ERRORS
Possible failure conditions:
.Bl -tag -width Er

View File

@ -3005,8 +3005,10 @@ freebsd32_posix_fadvise(struct thread *td,
struct freebsd32_posix_fadvise_args *uap)
{
return (kern_posix_fadvise(td, uap->fd, PAIR32TO64(off_t, uap->offset),
PAIR32TO64(off_t, uap->len), uap->advice));
td->td_retval[0] = kern_posix_fadvise(td, uap->fd,
PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len),
uap->advice);
return (0);
}
int

View File

@ -4725,6 +4725,7 @@ int
sys_posix_fadvise(struct thread *td, struct posix_fadvise_args *uap)
{
return (kern_posix_fadvise(td, uap->fd, uap->offset, uap->len,
uap->advice));
td->td_retval[0] = kern_posix_fadvise(td, uap->fd, uap->offset,
uap->len, uap->advice);
return (0);
}