ino64: Remove 'forward compat' code for this

Forward compatibility code was added for running newer ino64 binaries on
older kernels as a transition aide. Now that ino64 has been in the tree
6 years, this code is no longer useful and should have been removed long
ago.  Remove it now. Should be no user-visible changes at this point as
all the 'upgrade' scenarios it was intended for are long since past.

Also need to remove this stuff from rtld since the _foo versions
no longer exist.

Sponsored by:		Netflix
Reviewed by:		kib
Differential Revision:	https://reviews.freebsd.org/D42382
This commit is contained in:
Warner Losh 2023-10-31 14:55:58 -06:00
parent 1fc478fb48
commit 0527c9bdc7
13 changed files with 21 additions and 507 deletions

View file

@ -27,6 +27,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 15.x IS SLOW:
world, or to merely disable the most expensive debugging functionality
at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".)
20231027:
Forward compatibility (running the new code on old kernels) for the
"ino64" project have been removed. The need for it has passed long ago.
20231018:
Commit 57ce37f9dcd0 changed the internal KAPI between the
nfscommon and nfscl modules. Both must be rebuilt from sources.
@ -1573,6 +1577,14 @@ https://lists.freebsd.org/archives/freebsd-current/2021-June/000153.html
Switch back to the BSDL dtc (Device Tree Compiler). Set WITH_GPL_DTC
if you require the GPL compiler.
20170619:
Forward compatibility for the "ino64" project have been committed. This
will allow most new binaries to run on older kernels in a limited
fashion. This prevents many of the common foot-shooting actions in the
upgrade as well as the limited ability to roll back the kernel across
the ino64 upgrade. Complicated use cases may not work properly, though
enough simpler ones work to allow recovery in most situations.
20170618:
The internal ABI used for communication between the NFS kernel modules
was changed by r320085, so __FreeBSD_version was bumped to

View file

@ -38,14 +38,6 @@ SRCS+= getdents.c lstat.c mknod.c stat.c
NOASM+= sched_getcpu.o
PSEUDO+= _sched_getcpu.o
SRCS+= fstat.c fstatat.c fstatfs.c getfsstat.c statfs.c
NOASM+= fstat.o fstatat.o fstatfs.o getfsstat.o statfs.o
PSEUDO+= _fstat.o _fstatat.o _fstatfs.o _getfsstat.o _statfs.o
SRCS+= getdirentries.c
NOASM+= getdirentries.o
PSEUDO+= _getdirentries.o
SRCS+= brk.c
SRCS+= closefrom.c
SRCS+= pipe.c

View file

@ -1,99 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Forward compatibility shim to convert old stat buffer to
* new so we can call the old system call, but return data in
* the new system call's format.
*/
#define _WANT_FREEBSD11_STATFS
#include <sys/fcntl.h>
#include <sys/mount.h>
#define _WANT_FREEBSD11_STAT
#include <sys/stat.h>
#include <string.h>
#define INO64_FIRST 1200031
static __inline void
__stat11_to_stat(const struct freebsd11_stat *sb11, struct stat *sb)
{
sb->st_dev = sb11->st_dev;
sb->st_ino = sb11->st_ino;
sb->st_nlink = sb11->st_nlink;
sb->st_mode = sb11->st_mode;
sb->st_uid = sb11->st_uid;
sb->st_gid = sb11->st_gid;
sb->st_rdev = sb11->st_rdev;
sb->st_atim = sb11->st_atim;
sb->st_mtim = sb11->st_mtim;
sb->st_ctim = sb11->st_ctim;
#ifdef __STAT_TIME_T_EXT
sb->st_atim_ext = 0;
sb->st_mtim_ext = 0;
sb->st_ctim_ext = 0;
sb->st_btim_ext = 0;
#endif
sb->st_birthtim = sb11->st_birthtim;
sb->st_size = sb11->st_size;
sb->st_blocks = sb11->st_blocks;
sb->st_blksize = sb11->st_blksize;
sb->st_flags = sb11->st_flags;
sb->st_gen = sb11->st_gen;
sb->st_padding0 = 0;
sb->st_padding1 = 0;
memset(sb->st_spare, 0, sizeof(sb->st_spare));
}
static __inline void
__statfs11_to_statfs(const struct freebsd11_statfs *sf11, struct statfs *sf)
{
sf->f_version = STATFS_VERSION;
sf->f_type = sf11->f_type;
sf->f_flags = sf11->f_flags;
sf->f_bsize = sf11->f_bsize;
sf->f_iosize = sf11->f_iosize;
sf->f_blocks = sf11->f_blocks;
sf->f_bfree = sf11->f_bfree;
sf->f_bavail = sf11->f_bavail;
sf->f_files = sf11->f_files;
sf->f_ffree = sf11->f_ffree;
sf->f_syncwrites = sf11->f_syncwrites;
sf->f_asyncwrites = sf11->f_asyncwrites;
sf->f_syncreads = sf11->f_syncreads;
sf->f_asyncreads = sf11->f_asyncreads;
sf->f_namemax = sf11->f_namemax;
sf->f_owner = sf11->f_owner;
sf->f_fsid = sf11->f_fsid;
memset(sf->f_spare, 0, sizeof(sf->f_spare));
memset(sf->f_charspare, 0, sizeof(sf->f_charspare));
strlcpy(sf->f_fstypename, sf11->f_fstypename, sizeof(sf->f_fstypename));
strlcpy(sf->f_mntfromname, sf11->f_mntfromname, sizeof(sf->f_mntfromname));
strlcpy(sf->f_mntonname, sf11->f_mntonname, sizeof(sf->f_mntonname));
}

View file

@ -1,51 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <unistd.h>
#include "libc_private.h"
#undef fstat
__weak_reference(_fstat, fstat);
#pragma weak _fstat
int
_fstat(int fd, struct stat *sb)
{
struct freebsd11_stat stat11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_fstat(fd, sb));
rv = syscall(SYS_freebsd11_fstat, fd, &stat11);
if (rv == 0)
__stat11_to_stat(&stat11, sb);
return (rv);
}

View file

@ -1,47 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <unistd.h>
#include "libc_private.h"
int
fstatat(int fd, const char *path, struct stat *sb, int flag)
{
struct freebsd11_stat stat11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_fstatat(fd, path, sb, flag));
rv = syscall(SYS_freebsd11_fstatat, fd, path, &stat11, flag);
if (rv == 0)
__stat11_to_stat(&stat11, sb);
return (rv);
}

View file

@ -1,51 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <unistd.h>
#include "libc_private.h"
#undef fstatfs
__weak_reference(_fstatfs, fstatfs);
#pragma weak _fstatfs
int
_fstatfs(int fd, struct statfs *buf)
{
struct freebsd11_statfs statfs11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_fstatfs(fd, buf));
rv = syscall(SYS_freebsd11_fstatfs, fd, &statfs11);
if (rv == 0)
__statfs11_to_statfs(&statfs11, buf);
return (rv);
}

View file

@ -34,11 +34,6 @@
ssize_t
getdents(int fd, char *buf, size_t nbytes)
{
/*
* _getdirentries knows how to call the right thing and
* return it in the new format. It assumes that the entire
* libc expecting the new format.
*/
return (_getdirentries(fd, buf, nbytes, NULL));
return (__sys_getdirentries(fd, buf, nbytes, NULL));
}

View file

@ -1,114 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#define _WANT_FREEBSD11_DIRENT
#include "namespace.h"
#include <sys/param.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <dirent.h>
#include <errno.h>
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "libc_private.h"
static ssize_t
__cvt_dirents_from11(const char *de11, ssize_t len11, char *de, ssize_t len)
{
struct dirent *dst;
const struct freebsd11_dirent *src;
const char *edst, *esrc;
ssize_t rlen;
src = (const struct freebsd11_dirent *)de11;
dst = (struct dirent *)de;
esrc = de11 + len11;
edst = de + len;
while ((const char *)src < esrc && (const char *)dst < edst) {
rlen = roundup(offsetof(struct dirent, d_name) + src->d_namlen + 1, 8);
if ((const char *)dst + rlen >= edst)
break;
dst->d_fileno = src->d_fileno;
dst->d_off = 0; /* nothing uses it yet, so safe for now */
dst->d_reclen = rlen;
dst->d_type = src->d_type;
dst->d_pad0 = 0;
dst->d_namlen = src->d_namlen;
dst->d_pad1 = 0;
memset(dst->d_name, 0, roundup(src->d_namlen + 1, 8));
memcpy(dst->d_name, src->d_name, src->d_namlen);
dst = (struct dirent *)((char *)dst + rlen);
src = (const struct freebsd11_dirent *)((const char *)src + src->d_reclen);
}
return ((char *)dst - de);
}
#undef getdirentries
__weak_reference(_getdirentries, getdirentries);
#pragma weak _getdirentries
ssize_t
_getdirentries(int fd, char *buf, size_t nbytes, off_t *basep)
{
char *oldbuf;
size_t len;
ssize_t rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_getdirentries(fd, buf, nbytes, basep));
/*
* Because the old system call returns entries that are smaller than the
* new, we could wind up in a situation where we have too many to fit in
* the buffer with the new encoding. So sacrifice a small bit of
* efficiency to ensure that never happens. We pick 1/4 the size round
* up to the next DIRBLKSIZ. This will guarnatee enough room exists in
* the dst buffer due to changes in efficiency in packing dirent
* entries. We don't check against minimum block size to avoid a lot of
* stat calls, we'll see if that's wise or not.
* TBD: Will this difference matter to lseek?
*/
len = roundup(nbytes / 4, DIRBLKSIZ);
oldbuf = malloc(len);
if (oldbuf == NULL) {
errno = EINVAL; /* ENOMEM not in possible list */
return (-1);
}
rv = syscall(SYS_freebsd11_getdirentries, fd, oldbuf, len, basep);
if (rv == -1) {
free(oldbuf);
return (rv);
}
if (rv > 0)
rv = __cvt_dirents_from11(oldbuf, rv, buf, nbytes);
free(oldbuf);
return (rv);
}

View file

@ -1,62 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include "compat-ino64.h"
#include <sys/errno.h>
#include <sys/syscall.h>
#include <stdlib.h>
#include <unistd.h>
#include "libc_private.h"
int
getfsstat(struct statfs *buf, long bufsize, int flags)
{
struct freebsd11_statfs *statfs11 = NULL;
ssize_t len = 0;
int rv, i;
if (__getosreldate() >= INO64_FIRST)
return (__sys_getfsstat(buf, bufsize, flags));
if (buf != NULL) {
len = sizeof(struct freebsd11_statfs) * /* Round down on purpose to avoid */
(bufsize / sizeof(struct statfs)); /* overflow on translation. */
statfs11 = malloc(len);
if (statfs11 == NULL) {
errno = ENOMEM;
return (-1);
}
}
rv = syscall(SYS_freebsd11_getfsstat, statfs11, len, flags);
if (rv != -1 && buf != NULL) {
for (i = 0; i < rv; i++)
__statfs11_to_statfs(&statfs11[i], &buf[i]);
}
free(statfs11);
return (rv);
}

View file

@ -27,22 +27,15 @@
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/fcntl.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <sys/stat.h>
#include <unistd.h>
#include "libc_private.h"
int
lstat(const char *path, struct stat *sb)
{
struct freebsd11_stat stat11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_fstatat(AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
rv = syscall(SYS_freebsd11_lstat, path, &stat11);
if (rv == 0)
__stat11_to_stat(&stat11, sb);
return (rv);
return (__sys_fstatat(AT_FDCWD, path, sb, AT_SYMLINK_NOFOLLOW));
}

View file

@ -27,22 +27,15 @@
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/fcntl.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <sys/stat.h>
#include <unistd.h>
#include "libc_private.h"
int
stat(const char *path, struct stat *sb)
{
struct freebsd11_stat stat11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_fstatat(AT_FDCWD, path, sb, 0));
rv = syscall(SYS_freebsd11_stat, path, &stat11);
if (rv == 0)
__stat11_to_stat(&stat11, sb);
return (rv);
return (__sys_fstatat(AT_FDCWD, path, sb, 0));
}

View file

@ -1,47 +0,0 @@
/*-
* Copyright (c) 2017 M. Warner Losh <imp@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#include <sys/cdefs.h>
#include "namespace.h"
#include <sys/param.h>
#include <sys/syscall.h>
#include "compat-ino64.h"
#include <unistd.h>
#include "libc_private.h"
int
statfs(const char *path, struct statfs *buf)
{
struct freebsd11_statfs statfs11;
int rv;
if (__getosreldate() >= INO64_FIRST)
return (__sys_statfs(path, buf));
rv = syscall(SYS_freebsd11_statfs, path, &statfs11);
if (rv == 0)
__statfs11_to_statfs(&statfs11, buf);
return (rv);
}

View file

@ -56,8 +56,8 @@ CFLAGS.strtok.c+=-Wno-cast-qual
_libc_other_objects= sigsetjmp lstat stat fstat fstatat fstatfs syscall \
cerror geteuid getegid sigfastblock munmap mprotect \
sysarch __sysctl issetugid __getcwd utrace getpid \
thr_self thr_kill pread mmap lseek _exit _fstat _fstatat _fstatfs \
getdirentries _getdirentries _close _fcntl _open _openat _read \
thr_self thr_kill pread mmap lseek _exit \
getdirentries _close _fcntl _open _openat _read \
_sigprocmask _write readlink __realpathat _setjmp setjmp setjmperr