diff --git a/io/Makefile b/io/Makefile
index 887a989c03..d3d0dcf767 100644
--- a/io/Makefile
+++ b/io/Makefile
@@ -34,7 +34,7 @@ routines :=								\
 	mkfifo mkfifoat							\
 	stat fstat lstat stat64 fstat64 lstat64 fstatat fstatat64	\
 	statx								\
-	mknod mknodat xmknod xmknodat					\
+	mknod mknodat 							\
 	statfs fstatfs statfs64 fstatfs64				\
 	statvfs fstatvfs statvfs64 fstatvfs64				\
 	umask chmod fchmod lchmod fchmodat				\
diff --git a/io/mknod.c b/io/mknod.c
index 9eb4a2af7f..22566b259c 100644
--- a/io/mknod.c
+++ b/io/mknod.c
@@ -15,13 +15,13 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-#include <sys/types.h>
 #include <sys/stat.h>
+#include <fcntl.h>
 
 int
 __mknod (const char *path, mode_t mode, dev_t dev)
 {
-  return __xmknod (_MKNOD_VER, path, mode, &dev);
+  return __mknodat (AT_FDCWD, path, mode, dev);
 }
 libc_hidden_def (__mknod)
 weak_alias (__mknod, mknod)
diff --git a/io/mknodat.c b/io/mknodat.c
index 63a8068ad6..cf491f99a7 100644
--- a/io/mknodat.c
+++ b/io/mknodat.c
@@ -21,7 +21,10 @@
 int
 __mknodat (int fd, const char *path, mode_t mode, dev_t dev)
 {
-  return __xmknodat (_MKNOD_VER, fd, path, mode, &dev);
+  __set_errno (ENOSYS);
+  return -1;
 }
 libc_hidden_def (__mknodat)
 weak_alias (__mknodat, mknodat)
+
+stub_warning (mknodat)
diff --git a/io/xmknod.c b/io/xmknod.c
deleted file mode 100644
index 832dbf778e..0000000000
--- a/io/xmknod.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (C) 1991-2020 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
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-/* Create a device file named PATH, with permission and special bits MODE
-   and device number DEV (which can be constructed from major and minor
-   device numbers with the `makedev' macro above).  */
-int
-__xmknod (int vers, const char *path, mode_t mode, dev_t *dev)
-{
-  if (vers != _MKNOD_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (__xmknod)
-
-weak_alias (__xmknod, _xmknod)
-libc_hidden_def (__xmknod)
diff --git a/io/xmknodat.c b/io/xmknodat.c
deleted file mode 100644
index b6c668170b..0000000000
--- a/io/xmknodat.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Copyright (C) 2005-2020 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
-   <https://www.gnu.org/licenses/>.  */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-/* Create a device file named PATH relative to FD, with permission and
-   special bits MODE and device number DEV (which can be constructed
-   from major and minor device numbers with the `makedev' macro
-   above).  */
-int
-__xmknodat (int vers, int fd, const char *path, mode_t mode, dev_t *dev)
-{
-  if (vers != _MKNOD_VER)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (path == NULL)
-    {
-      __set_errno (EINVAL);
-      return -1;
-    }
-
-  if (fd != AT_FDCWD && path[0] != '/')
-    {
-      /* Check FD is associated with a directory.  */
-      struct stat64 st;
-      if (__fstat64 (fd, &st) != 0)
-	return -1;
-
-      if (!S_ISDIR (st.st_mode))
-	{
-	  __set_errno (ENOTDIR);
-	  return -1;
-	}
-    }
-
-  __set_errno (ENOSYS);
-  return -1;
-}
-stub_warning (__xmknodat)
-
-libc_hidden_def (__xmknodat)
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 571277cf7f..90c6b0e9a3 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -201,6 +201,7 @@ sysdep_routines += f_setlk close_nocancel close_nocancel_nostatus \
 		   pread64_nocancel write_nocancel pwrite64_nocancel \
 		   wait4_nocancel \
 		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
+		   xmknod xmknodat \
 		   fxstatat fxstatat64
 endif
 
diff --git a/sysdeps/mach/hurd/mknod.c b/sysdeps/mach/hurd/mknod.c
deleted file mode 100644
index 1b9c9db741..0000000000
--- a/sysdeps/mach/hurd/mknod.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (C) 1991-2020 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
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <shlib-compat.h>
-
-/* Create a device file named FILE_NAME, with permission and special bits MODE
-   and device number DEV (which can be constructed from major and minor
-   device numbers with the `makedev' macro above).  */
-int
-__mknod (const char *file_name, mode_t mode, dev_t dev)
-{
-  return __mknodat (AT_FDCWD, file_name, mode, dev);
-}
-libc_hidden_def (__mknod)
-weak_alias (__mknod, mknod)
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 899b6c9c77..472eab700d 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -63,7 +63,8 @@ sysdep_routines += adjtimex clone umount umount2 readahead sysctl \
 		   process_vm_readv process_vm_writev clock_adjtime \
 		   time64-support pselect32 \
 		   xstat fxstat lxstat xstat64 fxstat64 lxstat64 \
-		   fxstatat fxstatat64
+		   fxstatat fxstatat64 \
+		   xmknod xmknodat
 
 CFLAGS-gethostid.c = -fexceptions
 CFLAGS-tee.c = -fexceptions -fasynchronous-unwind-tables
diff --git a/sysdeps/unix/sysv/linux/mknod.c b/sysdeps/unix/sysv/linux/mknod.c
deleted file mode 100644
index 7e290ddc8b..0000000000
--- a/sysdeps/unix/sysv/linux/mknod.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Create a special or ordinary file.  Linux version.
-   Copyright (C) 2020 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
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sys/stat.h>
-#include <fcntl.h>
-
-int
-__mknod (const char *path, mode_t mode, dev_t dev)
-{
-  return __mknodat (AT_FDCWD, path, mode, dev);
-}
-libc_hidden_def (__mknod)
-weak_alias (__mknod, mknod)
