diff mbox series

[2/2] Deprecate ustat syscall interface

Message ID 1524523018-7216-2-git-send-email-adhemerval.zanella@linaro.org
State New
Headers show
Series [1/2] Deprecate sysctl syscall interface | expand

Commit Message

Adhemerval Zanella April 23, 2018, 10:36 p.m. UTC
As for sysctl, ustat has been deprecated in favor of fstatfs.  Newer
ports which uses generic interface builds a stub version which
returns ENOSYS.

This patch deprecate ustat interface by issuing ENOSYS as default
and adds compat symbol for architectures which still defines
__NR_ustat.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with a
check-abi on all affected ABIs.

	* sysdeps/unix/sysv/linux/generic/ustat.c: Move to ...
	* sysdeps/unix/sysv/linux/ustat.c: ... here and deprecate symbol.
	* sysdeps/unix/sysv/linux/alpha/libc.abilist [GLIBC_2.28] (ustat):
	Add symbol.
	* sysdeps/unix/sysv/linux/arm/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/hppa/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/i386/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/ia64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/microblaze/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sh/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/64/libc.abilist: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist: Likewise.
---
 ChangeLog                                          | 22 +++++++++++++++
 sysdeps/unix/sysv/linux/alpha/libc.abilist         |  1 +
 sysdeps/unix/sysv/linux/arm/libc.abilist           |  1 +
 sysdeps/unix/sysv/linux/generic/ustat.c            | 32 ----------------------
 sysdeps/unix/sysv/linux/hppa/libc.abilist          |  1 +
 sysdeps/unix/sysv/linux/i386/libc.abilist          |  1 +
 sysdeps/unix/sysv/linux/ia64/libc.abilist          |  1 +
 sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist   |  1 +
 sysdeps/unix/sysv/linux/microblaze/libc.abilist    |  1 +
 .../sysv/linux/powerpc/powerpc32/fpu/libc.abilist  |  1 +
 .../linux/powerpc/powerpc32/nofpu/libc.abilist     |  1 +
 .../unix/sysv/linux/powerpc/powerpc64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist  |  1 +
 sysdeps/unix/sysv/linux/sh/libc.abilist            |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist |  1 +
 sysdeps/unix/sysv/linux/ustat.c                    | 29 +++++++++++++++-----
 sysdeps/unix/sysv/linux/x86_64/64/libc.abilist     |  1 +
 sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist    |  1 +
 21 files changed, 62 insertions(+), 39 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/generic/ustat.c

-- 
2.7.4

Comments

Joseph Myers April 23, 2018, 11:16 p.m. UTC | #1
Again, this is the wrong way to obsolete something - a new symbol version 
should not be added as part of deprecation.  And, any deprecation needs a 
NEWS enty.

-- 
Joseph S. Myers
joseph@codesourcery.com
Adhemerval Zanella April 25, 2018, 12:50 p.m. UTC | #2
On 23/04/2018 20:16, Joseph Myers wrote:
> Again, this is the wrong way to obsolete something - a new symbol version 

> should not be added as part of deprecation.  And, any deprecation needs a 

> NEWS enty.

> 


Below it is an updated patch which addresses the issues you brought.

---

As for sysctl, ustat has been deprecated in favor of fstatfs.  Newer
ports which uses generic interface builds a stub version which
returns ENOSYS.

This patch deprecate ustat interface by issuing ENOSYS as default
and adds compat symbol for architectures which still defines
__NR_ustat.

Checked on x86_64-linux-gnu and i686-linux-gnu.  Also checked with a
check-abi on all affected ABIs.

	* NEWS: Add ustat.h deprecation entry.
	* bits/ustat.h: Remove file.
	* misc/sys/ustat.h: Likewise.
	* misc/ustat.h: Likewise.
	* sysdeps/unix/sysv/linux/generic/ustat.c: Likewise.
	* misc/Makefile (headers): Remove ustat.h and sys/ustat.h.
	* misc/ustat.c (__ustat): Rename to __old_ustat and export only in
	compatibility mode.
	* sysdeps/unix/sysv/linux/ustat.c (__ustat): Likewise.
	* sysdeps/unix/sysv/linux/mips/ustat.c: Define DEV_TO_KDEV and use
	generic Linux implementation.
---
 ChangeLog                               | 12 ++++++++
 NEWS                                    |  5 ++++
 bits/ustat.h                            | 30 --------------------
 misc/Makefile                           |  2 +-
 misc/sys/ustat.h                        | 37 ------------------------
 misc/ustat.c                            | 22 ++++++++++++---
 misc/ustat.h                            |  1 -
 sysdeps/unix/sysv/linux/generic/ustat.c | 32 ---------------------
 sysdeps/unix/sysv/linux/mips/ustat.c    | 21 +++++---------
 sysdeps/unix/sysv/linux/ustat.c         | 50 +++++++++++++++++++++++----------
 10 files changed, 78 insertions(+), 134 deletions(-)
 delete mode 100644 bits/ustat.h
 delete mode 100644 misc/sys/ustat.h
 delete mode 100644 misc/ustat.h
 delete mode 100644 sysdeps/unix/sysv/linux/generic/ustat.c

diff --git a/NEWS b/NEWS
index ffe3bb4..f8cd879 100644
--- a/NEWS
+++ b/NEWS
@@ -62,6 +62,11 @@ Deprecated and removed features, and other changes affecting compatibility:
    of /proc/sys.  A compatibility symbol is still provided, however it is
    not being defined for static linking or for new ports.
 
+ * The header file <ustat.h> is no longer installed.  Software should
+   be updated to use 'statfs' instead.  A compatibility symbol is still
+   provided, however it is not being defined for static linking or for
+   new ports.
+
 Changes to build and runtime requirements:
 
   [Add changes to build and runtime requirements here]
diff --git a/bits/ustat.h b/bits/ustat.h
deleted file mode 100644
index ac9acca..0000000
--- a/bits/ustat.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright (C) 1997-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#ifndef _SYS_USTAT_H
-# error "Never include <bits/ustat.h> directly; use <sys/ustat.h> instead."
-#endif
-
-#include <sys/types.h>
-
-struct ustat
-  {
-    __daddr_t f_tfree;		/* Number of free blocks.  */
-    __ino_t f_tinode;		/* Number of free inodes.  */
-    char f_fname[6];
-    char f_fpack[6];
-  };
diff --git a/misc/Makefile b/misc/Makefile
index a5076b3..a1d568b 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -31,7 +31,7 @@ headers	:= sys/uio.h bits/uio-ext.h bits/uio_lim.h \
 	   sys/mman.h sys/param.h bits/param.h \
 	   fstab.h mntent.h search.h err.h error.h \
 	   sys/queue.h sysexits.h syscall.h sys/syscall.h sys/swap.h \
-	   sys/select.h ustat.h sys/ustat.h bits/ustat.h sys/sysinfo.h \
+	   sys/select.h sys/sysinfo.h \
 	   regexp.h bits/select.h bits/mman.h sys/xattr.h \
 	   syslog.h sys/syslog.h \
 	   bits/syslog.h bits/syslog-ldbl.h bits/syslog-path.h bits/error.h \
diff --git a/misc/sys/ustat.h b/misc/sys/ustat.h
deleted file mode 100644
index 828ca41..0000000
--- a/misc/sys/ustat.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Header describing obsolete `ustat' interface.
-   Copyright (C) 1996-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <http://www.gnu.org/licenses/>.  */
-
-/*
- * This interface is obsolete.  Use <sys/statfs.h> instead.
- */
-
-#ifndef _SYS_USTAT_H
-#define	_SYS_USTAT_H	1
-
-#include <features.h>
-
-#include <sys/types.h>
-#include <bits/ustat.h>
-
-__BEGIN_DECLS
-
-extern int ustat (__dev_t __dev, struct ustat *__ubuf) __THROW;
-
-__END_DECLS
-
-#endif /* sys/ustat.h */
diff --git a/misc/ustat.c b/misc/ustat.c
index e5abeda..717d6d7 100644
--- a/misc/ustat.c
+++ b/misc/ustat.c
@@ -16,14 +16,28 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <unistd.h>
-#include <errno.h>
-#include <sys/ustat.h>
+#include <shlib-compat.h>
+
+/* This deprecated syscall is no longer used (replaced with fstat).  */
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
+
+# include <unistd.h>
+# include <errno.h>
+
+struct ustat
+ {
+   __daddr_t f_tfree;         /* Number of free blocks.  */
+   __ino_t f_tinode;          /* Number of free inodes.  */
+   char f_fname[6];
+   char f_fpack[6];
+};
 
 int
-ustat (dev_t dev, struct ustat *ust)
+__old_ustat (dev_t dev, struct ustat *ust)
 {
   __set_errno (ENOSYS);
   return -1;
 }
 stub_warning (ustat)
+compat_symbol (libc, __old_ustat, ustat, GLIBC_2_0);
+#endif
diff --git a/misc/ustat.h b/misc/ustat.h
deleted file mode 100644
index cba150e..0000000
--- a/misc/ustat.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <sys/ustat.h>
diff --git a/sysdeps/unix/sysv/linux/generic/ustat.c b/sysdeps/unix/sysv/linux/generic/ustat.c
deleted file mode 100644
index d4f9c89..0000000
--- a/sysdeps/unix/sysv/linux/generic/ustat.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <sys/ustat.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* This deprecated syscall is no longer used (replaced with fstat).  */
-int
-ustat (dev_t dev, struct ustat *ubuf)
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (ustat)
diff --git a/sysdeps/unix/sysv/linux/mips/ustat.c b/sysdeps/unix/sysv/linux/mips/ustat.c
index 1f597c9..786a5ef 100644
--- a/sysdeps/unix/sysv/linux/mips/ustat.c
+++ b/sysdeps/unix/sysv/linux/mips/ustat.c
@@ -16,20 +16,13 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <sys/ustat.h>
 #include <sys/sysmacros.h>
 
-#include <sysdep.h>
-#include <sys/syscall.h>
+#define DEV_TO_KDEV(__dev)					\
+  ({								\
+    unsigned long k_dev;					\
+    k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);	\
+    k_dev;							\
+  })
 
-int
-ustat (dev_t dev, struct ustat *ubuf)
-{
-  unsigned long k_dev;
-
-  /* We must convert the value to dev_t type used by the kernel.  */
-  k_dev = ((major (dev) & 0xff) << 8) | (minor (dev) & 0xff);
-
-  return INLINE_SYSCALL (ustat, 2, k_dev, ubuf);
-}
+#include <sysdeps/unix/sysv/linux/ustat.c>
diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c
index 8e73faa..accbc86 100644
--- a/sysdeps/unix/sysv/linux/ustat.c
+++ b/sysdeps/unix/sysv/linux/ustat.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997-2018 Free Software Foundation, Inc.
+/* Get filesystem statistics (deprecated).  Linux version.
+   Copyright (C) 1997-2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -16,22 +17,41 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
-#include <sys/ustat.h>
-#include <sys/sysmacros.h>
+#include <shlib-compat.h>
 
-#include <sysdep.h>
-#include <sys/syscall.h>
+/* This deprecated syscall is no longer used (replaced with fstat).  */
+#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
 
-int
-ustat (dev_t dev, struct ustat *ubuf)
-{
-  unsigned long long int k_dev;
+# include <sysdep.h>
+# include <errno.h>
+
+# ifndef DEV_TO_KDEV
+#  define DEV_TO_KDEV(__dev)					\
+  ({								\
+    unsigned long long int k_dev;				\
+    k_dev = dev & ((1ULL << 32) - 1);				\
+    if (k_dev != dev)						\
+     return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);		\
+    (unsigned int) k_dev;					\
+  })
+# endif
 
-  /* We must convert the value to dev_t type used by the kernel.  */
-  k_dev =  dev & ((1ULL << 32) - 1);
-  if (k_dev != dev)
-    return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
+struct ustat
+{
+  __daddr_t f_tfree;         /* Number of free blocks.  */
+  __ino_t f_tinode;          /* Number of free inodes.  */
+  char f_fname[6];
+  char f_fpack[6];
+};
 
-  return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, ubuf);
+int
+__old_ustat (dev_t dev, struct ustat *ubuf)
+{
+# ifdef __NR_ustat
+  return INLINE_SYSCALL_CALL (ustat, DEV_TO_KDEV (dev), ubuf);
+# else
+  return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOSYS);
+# endif
 }
+compat_symbol (libc, __old_ustat, ustat, GLIBC_2_0);
+#endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)  */
-- 
2.7.4
Joseph Myers April 25, 2018, 2:47 p.m. UTC | #3
On Wed, 25 Apr 2018, Adhemerval Zanella wrote:

> This patch deprecate ustat interface by issuing ENOSYS as default

> and adds compat symbol for architectures which still defines

> __NR_ustat.


Again, ENOSYS is nothing to do with deprecation.

> +/* This deprecated syscall is no longer used (replaced with fstat).  */


All these comments are inaccurate (should reference statfs etc., not 
fstat).

-- 
Joseph S. Myers
joseph@codesourcery.com
Adhemerval Zanella April 25, 2018, 5:59 p.m. UTC | #4
On 25/04/2018 11:47, Joseph Myers wrote:
> On Wed, 25 Apr 2018, Adhemerval Zanella wrote:

> 

>> This patch deprecate ustat interface by issuing ENOSYS as default

>> and adds compat symbol for architectures which still defines

>> __NR_ustat.

> 

> Again, ENOSYS is nothing to do with deprecation.


I will change to 

This patch deprecates ustat interface by removing ustat.h related headers,
adding a compatibility symbol, and avoiding new ports to build and provide 
the symbol.

> 

>> +/* This deprecated syscall is no longer used (replaced with fstat).  */

> 

> All these comments are inaccurate (should reference statfs etc., not 

> fstat).

> 


Ack.
Florian Weimer April 29, 2018, 9:08 p.m. UTC | #5
On 04/25/2018 07:59 PM, Adhemerval Zanella wrote:
> This patch deprecates ustat interface by removing ustat.h related headers,

> adding a compatibility symbol, and avoiding new ports to build and provide

> the symbol.


Perhaps mirror what we said before, e.g. this?

> * The obsolete functions bdflush, create_module, get_kernel_syms,

>   query_module and uselib are no longer available to newly linked binaries;

>   the header <sys/kdaemon.h> has been removed.  These functions and header

>   were specific to systems using the Linux kernel and could not usefully be

>   used with the GNU C Library on systems with version 2.6 or later of the

>   Linux kernel.


Thanks,
Florian
Adhemerval Zanella April 30, 2018, 11:06 a.m. UTC | #6
On 29/04/2018 18:08, Florian Weimer wrote:
> On 04/25/2018 07:59 PM, Adhemerval Zanella wrote:

>> This patch deprecates ustat interface by removing ustat.h related headers,

>> adding a compatibility symbol, and avoiding new ports to build and provide

>> the symbol.

> 

> Perhaps mirror what we said before, e.g. this?

> 

>> * The obsolete functions bdflush, create_module, get_kernel_syms,

>>   query_module and uselib are no longer available to newly linked binaries;

>>   the header <sys/kdaemon.h> has been removed.  These functions and header

>>   were specific to systems using the Linux kernel and could not usefully be

>>   used with the GNU C Library on systems with version 2.6 or later of the

>>   Linux kernel.


Alright, I will change to:

* The obsolete function ustat is no longer available to newly linked binaries;
  the headers <ustat.h> and <sys/ustat.h> have been removed.  This function 
  has been deprecated in favor of fstatfs and statfs.
diff mbox series

Patch

diff --git a/sysdeps/unix/sysv/linux/alpha/libc.abilist b/sysdeps/unix/sysv/linux/alpha/libc.abilist
index 09fc772..d757897 100644
--- a/sysdeps/unix/sysv/linux/alpha/libc.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libc.abilist
@@ -2056,6 +2056,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/arm/libc.abilist b/sysdeps/unix/sysv/linux/arm/libc.abilist
index 35741a8..a52db8b 100644
--- a/sysdeps/unix/sysv/linux/arm/libc.abilist
+++ b/sysdeps/unix/sysv/linux/arm/libc.abilist
@@ -132,6 +132,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0xa0
diff --git a/sysdeps/unix/sysv/linux/generic/ustat.c b/sysdeps/unix/sysv/linux/generic/ustat.c
deleted file mode 100644
index d4f9c89..0000000
--- a/sysdeps/unix/sysv/linux/generic/ustat.c
+++ /dev/null
@@ -1,32 +0,0 @@ 
-/* Copyright (C) 2011-2018 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library.  If not, see
-   <http://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <sys/ustat.h>
-
-#include <sysdep.h>
-#include <sys/syscall.h>
-
-/* This deprecated syscall is no longer used (replaced with fstat).  */
-int
-ustat (dev_t dev, struct ustat *ubuf)
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (ustat)
diff --git a/sysdeps/unix/sysv/linux/hppa/libc.abilist b/sysdeps/unix/sysv/linux/hppa/libc.abilist
index 1da5f49..d43a2fa 100644
--- a/sysdeps/unix/sysv/linux/hppa/libc.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libc.abilist
@@ -1896,6 +1896,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/i386/libc.abilist b/sysdeps/unix/sysv/linux/i386/libc.abilist
index 2a1c99c..b17a8f9 100644
--- a/sysdeps/unix/sysv/linux/i386/libc.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libc.abilist
@@ -2066,6 +2066,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/ia64/libc.abilist b/sysdeps/unix/sysv/linux/ia64/libc.abilist
index 8b51692..9e255b0 100644
--- a/sysdeps/unix/sysv/linux/ia64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/ia64/libc.abilist
@@ -1930,6 +1930,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
index d26f322..d8d05b2 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
@@ -133,6 +133,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.4 GLIBC_2.4 A
 GLIBC_2.4 _Exit F
 GLIBC_2.4 _IO_2_1_stderr_ D 0x98
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
index 04dcf51..5888c38 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
@@ -2010,6 +2010,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/microblaze/libc.abilist b/sysdeps/unix/sysv/linux/microblaze/libc.abilist
index dd4656c..02d50f5 100644
--- a/sysdeps/unix/sysv/linux/microblaze/libc.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/libc.abilist
@@ -2131,3 +2131,4 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
index 836fdab..9a80189 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
@@ -2014,6 +2014,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
index e68ef0e..a7b7d23 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
@@ -2019,6 +2019,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
index 5983ac1..12721da 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/libc.abilist
@@ -133,6 +133,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 _Exit F
 GLIBC_2.3 _IO_2_1_stderr_ D 0xe0
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
index fad7b94..96c38d6 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
@@ -2024,6 +2024,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
index 8e88894..59832c1 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libc.abilist
@@ -1925,6 +1925,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sh/libc.abilist b/sysdeps/unix/sysv/linux/sh/libc.abilist
index 4b8f56f..790ef22 100644
--- a/sysdeps/unix/sysv/linux/sh/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sh/libc.abilist
@@ -1900,6 +1900,7 @@  GLIBC_2.27 wcstof64 F
 GLIBC_2.27 wcstof64_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
index 5bb6028..6873735 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist
@@ -2017,6 +2017,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
index 1ea1a9e..6a58857 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libc.abilist
@@ -1954,6 +1954,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/ustat.c b/sysdeps/unix/sysv/linux/ustat.c
index 8e73faa..1fcec18 100644
--- a/sysdeps/unix/sysv/linux/ustat.c
+++ b/sysdeps/unix/sysv/linux/ustat.c
@@ -1,4 +1,5 @@ 
-/* Copyright (C) 1997-2018 Free Software Foundation, Inc.
+/* Get filesystem statistics (deprecated).  Linux version.
+   Copyright (C) 1997-2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -16,15 +17,25 @@ 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <errno.h>
 #include <sys/ustat.h>
-#include <sys/sysmacros.h>
-
 #include <sysdep.h>
-#include <sys/syscall.h>
+#include <errno.h>
+#include <shlib-compat.h>
 
+/* This deprecated syscall is no longer used (replaced with fstat).  */
+int
+__deprecated_ustat (dev_t dev, struct ustat *ubuf)
+{
+  __set_errno (ENOSYS);
+  return -1;
+}
+#ifndef __NR_ustat
+weak_alias (__deprecated_ustat, ustat)
+#else
+versioned_symbol (libc, __deprecated_ustat, ustat, GLIBC_2_28);
+# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)
 int
-ustat (dev_t dev, struct ustat *ubuf)
+__old_ustat (dev_t dev, struct ustat *ubuf)
 {
   unsigned long long int k_dev;
 
@@ -33,5 +44,9 @@  ustat (dev_t dev, struct ustat *ubuf)
   if (k_dev != dev)
     return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL);
 
-  return INLINE_SYSCALL (ustat, 2, (unsigned int) k_dev, ubuf);
+  return INLINE_SYSCALL_CALL (ustat, (unsigned int) k_dev, ubuf);
 }
+compat_symbol (libc, __old_ustat, ustat, GLIBC_2_0);
+# endif /* SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_28)  */
+#endif /* __NR_ustat  */
+stub_warning (ustat)
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
index 576d3bd..5c682ac 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libc.abilist
@@ -1907,6 +1907,7 @@  GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
 GLIBC_2.28 sysctl F
+GLIBC_2.28 ustat F
 GLIBC_2.3 GLIBC_2.3 A
 GLIBC_2.3 __ctype_b_loc F
 GLIBC_2.3 __ctype_tolower_loc F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
index 31d612f..cc7bb7c 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libc.abilist
@@ -2149,3 +2149,4 @@  GLIBC_2.27 wcstof64_l F
 GLIBC_2.27 wcstof64x F
 GLIBC_2.27 wcstof64x_l F
 GLIBC_2.28 GLIBC_2.28 A
+GLIBC_2.28 ustat F