svn commit: r261561 - in stable/9: lib/libc/gen lib/libc/sys sys/compat/freebsd32 sys/kern

Konstantin Belousov kib at FreeBSD.org
Thu Feb 6 19:47:52 UTC 2014


Author: kib
Date: Thu Feb  6 19:47:50 2014
New Revision: 261561
URL: http://svnweb.freebsd.org/changeset/base/261561

Log:
  MFC r261080:
  The posix_fallocate(2) syscall should return error number on error,
  without modifying errno.
  
  MFC r261290:
  The posix_madvise(3) and posix_fadvise(2) should return error on
  failure, same as posix_fallocate(2).

Modified:
  stable/9/lib/libc/gen/pmadvise.c
  stable/9/lib/libc/sys/madvise.2
  stable/9/lib/libc/sys/posix_fadvise.2
  stable/9/lib/libc/sys/posix_fallocate.2
  stable/9/sys/compat/freebsd32/freebsd32_misc.c
  stable/9/sys/kern/vfs_syscalls.c
Directory Properties:
  stable/9/lib/libc/   (props changed)
  stable/9/lib/libc/sys/   (props changed)
  stable/9/sys/   (props changed)

Modified: stable/9/lib/libc/gen/pmadvise.c
==============================================================================
--- stable/9/lib/libc/gen/pmadvise.c	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/lib/libc/gen/pmadvise.c	Thu Feb  6 19:47:50 2014	(r261561)
@@ -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);
 }

Modified: stable/9/lib/libc/sys/madvise.2
==============================================================================
--- stable/9/lib/libc/sys/madvise.2	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/lib/libc/sys/madvise.2	Thu Feb  6 19:47:50 2014	(r261561)
@@ -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 i
 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

Modified: stable/9/lib/libc/sys/posix_fadvise.2
==============================================================================
--- stable/9/lib/libc/sys/posix_fadvise.2	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/lib/libc/sys/posix_fadvise.2	Thu Feb  6 19:47:50 2014	(r261561)
@@ -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
@@ -94,7 +94,7 @@ Future access to this data may require a
 .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

Modified: stable/9/lib/libc/sys/posix_fallocate.2
==============================================================================
--- stable/9/lib/libc/sys/posix_fallocate.2	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/lib/libc/sys/posix_fallocate.2	Thu Feb  6 19:47:50 2014	(r261561)
@@ -84,9 +84,8 @@ that reduces the file size to a size sma
 If successful,
 .Fn posix_fallocate
 returns zero.
-It returns -1 on failure, and sets
-.Va errno
-to indicate the error.
+It returns an error on failure, without setting
+.Va errno .
 .Sh ERRORS
 Possible failure conditions:
 .Bl -tag -width Er

Modified: stable/9/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- stable/9/sys/compat/freebsd32/freebsd32_misc.c	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/sys/compat/freebsd32/freebsd32_misc.c	Thu Feb  6 19:47:50 2014	(r261561)
@@ -2953,8 +2953,9 @@ freebsd32_posix_fallocate(struct thread 
     struct freebsd32_posix_fallocate_args *uap)
 {
 
-	return (kern_posix_fallocate(td, uap->fd,
-	    PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len)));
+	td->td_retval[0] = kern_posix_fallocate(td, uap->fd,
+	    PAIR32TO64(off_t, uap->offset), PAIR32TO64(off_t, uap->len));
+	return (0);
 }
 
 int
@@ -2962,8 +2963,10 @@ freebsd32_posix_fadvise(struct thread *t
     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

Modified: stable/9/sys/kern/vfs_syscalls.c
==============================================================================
--- stable/9/sys/kern/vfs_syscalls.c	Thu Feb  6 19:47:17 2014	(r261560)
+++ stable/9/sys/kern/vfs_syscalls.c	Thu Feb  6 19:47:50 2014	(r261561)
@@ -4880,7 +4880,9 @@ int
 sys_posix_fallocate(struct thread *td, struct posix_fallocate_args *uap)
 {
 
-	return (kern_posix_fallocate(td, uap->fd, uap->offset, uap->len));
+	td->td_retval[0] = kern_posix_fallocate(td, uap->fd, uap->offset,
+	    uap->len);
+	return (0);
 }
 
 /*
@@ -5018,6 +5020,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);
 }


More information about the svn-src-all mailing list