diff mbox series

[4/9] nfs-utils: Replace statfs64 with statfs

Message ID 20221221175551.1940464-4-raj.khem@gmail.com
State Accepted, archived
Commit ce6a6cc8e468603a1ccec68ec70fc1a079411fca
Headers show
Series [1/9] libbsd: Fix build with largefile support | expand

Commit Message

Khem Raj Dec. 21, 2022, 5:55 p.m. UTC
Fixes LFS64 builds

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 .../0001-Replace-statfs64-with-statfs.patch   | 171 ++++++++++++++++++
 .../nfs-utils/nfs-utils_2.6.2.bb              |   1 +
 2 files changed, 172 insertions(+)
 create mode 100644 meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Replace-statfs64-with-statfs.patch
diff mbox series

Patch

diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Replace-statfs64-with-statfs.patch b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Replace-statfs64-with-statfs.patch
new file mode 100644
index 0000000000..40ceff9ae9
--- /dev/null
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils/0001-Replace-statfs64-with-statfs.patch
@@ -0,0 +1,171 @@ 
+From e89652b853ca7de671093ae44305fa3435e13d3d Mon Sep 17 00:00:00 2001
+From: Khem Raj <raj.khem@gmail.com>
+Date: Thu, 15 Dec 2022 13:29:43 -0800
+Subject: [PATCH] Replace statfs64 with statfs
+
+autoconf AC_SYS_LARGEFILE is used by configure to add needed defines
+when needed for enabling 64bit off_t, therefore replacing statfs64 with
+statfs should be functionally same. Additionally this helps compiling
+with latest musl where 64bit LFS functions like statfs64 and friends are
+now moved under _LARGEFILE64_SOURCE feature test macro, this works on
+glibc systems because _GNU_SOURCE macros also enables
+_LARGEFILE64_SOURCE indirectly. This is not case with musl and this
+latest issue is exposed.
+
+Upstream-Status: Submitted [https://lore.kernel.org/linux-nfs/20221215213605.4061853-1-raj.khem@gmail.com/T/#u]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ support/export/cache.c      | 14 +++++++-------
+ support/include/nfsd_path.h |  6 +++---
+ support/misc/nfsd_path.c    | 24 ++++++++++++------------
+ utils/exportfs/exportfs.c   |  4 ++--
+ 4 files changed, 24 insertions(+), 24 deletions(-)
+
+diff --git a/support/export/cache.c b/support/export/cache.c
+index a5823e9..2497d4f 100644
+--- a/support/export/cache.c
++++ b/support/export/cache.c
+@@ -346,27 +346,27 @@ static int uuid_by_path(char *path, int type, size_t uuidlen, char *uuid)
+ 
+ 	/* Possible sources of uuid are
+ 	 * - blkid uuid
+-	 * - statfs64 uuid
++	 * - statfs uuid
+ 	 *
+-	 * On some filesystems (e.g. vfat) the statfs64 uuid is simply an
++	 * On some filesystems (e.g. vfat) the statfs uuid is simply an
+ 	 * encoding of the device that the filesystem is mounted from, so
+ 	 * it we be very bad to use that (as device numbers change).  blkid
+ 	 * must be preferred.
+-	 * On other filesystems (e.g. btrfs) the statfs64 uuid contains
++	 * On other filesystems (e.g. btrfs) the statfs uuid contains
+ 	 * important info that the blkid uuid cannot contain:  This happens
+ 	 * when multiple subvolumes are exported (they have the same
+-	 * blkid uuid but different statfs64 uuids).
++	 * blkid uuid but different statfs uuids).
+ 	 * We rely on get_uuid_blkdev *knowing* which is which and not returning
+-	 * a uuid for filesystems where the statfs64 uuid is better.
++	 * a uuid for filesystems where the statfs uuid is better.
+ 	 *
+ 	 */
+-	struct statfs64 st;
++	struct statfs st;
+ 	char fsid_val[17];
+ 	const char *blkid_val = NULL;
+ 	const char *val;
+ 	int rc;
+ 
+-	rc = nfsd_path_statfs64(path, &st);
++	rc = nfsd_path_statfs(path, &st);
+ 
+ 	if (type == 0 && rc == 0) {
+ 		const unsigned long *bad;
+diff --git a/support/include/nfsd_path.h b/support/include/nfsd_path.h
+index 3b73aad..aa1e1dd 100644
+--- a/support/include/nfsd_path.h
++++ b/support/include/nfsd_path.h
+@@ -7,7 +7,7 @@
+ #include <sys/stat.h>
+ 
+ struct file_handle;
+-struct statfs64;
++struct statfs;
+ 
+ void 		nfsd_path_init(void);
+ 
+@@ -18,8 +18,8 @@ char *		nfsd_path_prepend_dir(const char *dir, const char *pathname);
+ int 		nfsd_path_stat(const char *pathname, struct stat *statbuf);
+ int 		nfsd_path_lstat(const char *pathname, struct stat *statbuf);
+ 
+-int		nfsd_path_statfs64(const char *pathname,
+-				   struct statfs64 *statbuf);
++int		nfsd_path_statfs(const char *pathname,
++				   struct statfs *statbuf);
+ 
+ char *		nfsd_realpath(const char *path, char *resolved_path);
+ 
+diff --git a/support/misc/nfsd_path.c b/support/misc/nfsd_path.c
+index 65e53c1..c3dea4f 100644
+--- a/support/misc/nfsd_path.c
++++ b/support/misc/nfsd_path.c
+@@ -184,46 +184,46 @@ nfsd_path_lstat(const char *pathname, struct stat *statbuf)
+ 	return nfsd_run_stat(nfsd_wq, nfsd_lstatfunc, pathname, statbuf);
+ }
+ 
+-struct nfsd_statfs64_data {
++struct nfsd_statfs_data {
+ 	const char *pathname;
+-	struct statfs64 *statbuf;
++	struct statfs *statbuf;
+ 	int ret;
+ 	int err;
+ };
+ 
+ static void
+-nfsd_statfs64func(void *data)
++nfsd_statfsfunc(void *data)
+ {
+-	struct nfsd_statfs64_data *d = data;
++	struct nfsd_statfs_data *d = data;
+ 
+-	d->ret = statfs64(d->pathname, d->statbuf);
++	d->ret = statfs(d->pathname, d->statbuf);
+ 	if (d->ret < 0)
+ 		d->err = errno;
+ }
+ 
+ static int
+-nfsd_run_statfs64(struct xthread_workqueue *wq,
++nfsd_run_statfs(struct xthread_workqueue *wq,
+ 		  const char *pathname,
+-		  struct statfs64 *statbuf)
++		  struct statfs *statbuf)
+ {
+-	struct nfsd_statfs64_data data = {
++	struct nfsd_statfs_data data = {
+ 		pathname,
+ 		statbuf,
+ 		0,
+ 		0
+ 	};
+-	xthread_work_run_sync(wq, nfsd_statfs64func, &data);
++	xthread_work_run_sync(wq, nfsd_statfsfunc, &data);
+ 	if (data.ret < 0)
+ 		errno = data.err;
+ 	return data.ret;
+ }
+ 
+ int
+-nfsd_path_statfs64(const char *pathname, struct statfs64 *statbuf)
++nfsd_path_statfs(const char *pathname, struct statfs *statbuf)
+ {
+ 	if (!nfsd_wq)
+-		return statfs64(pathname, statbuf);
+-	return nfsd_run_statfs64(nfsd_wq, pathname, statbuf);
++		return statfs(pathname, statbuf);
++	return nfsd_run_statfs(nfsd_wq, pathname, statbuf);
+ }
+ 
+ struct nfsd_realpath_data {
+diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c
+index 0897b22..6d79a5b 100644
+--- a/utils/exportfs/exportfs.c
++++ b/utils/exportfs/exportfs.c
+@@ -513,7 +513,7 @@ validate_export(nfs_export *exp)
+ 	 */
+ 	struct stat stb;
+ 	char *path = exportent_realpath(&exp->m_export);
+-	struct statfs64 stf;
++	struct statfs stf;
+ 	int fs_has_fsid = 0;
+ 
+ 	if (stat(path, &stb) < 0) {
+@@ -528,7 +528,7 @@ validate_export(nfs_export *exp)
+ 	if (!can_test())
+ 		return;
+ 
+-	if (!statfs64(path, &stf) &&
++	if (!statfs(path, &stf) &&
+ 	    (stf.f_fsid.__val[0] || stf.f_fsid.__val[1]))
+ 		fs_has_fsid = 1;
+ 
diff --git a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.2.bb b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.2.bb
index 4b5c28c27b..21df1803c5 100644
--- a/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.2.bb
+++ b/meta/recipes-connectivity/nfs-utils/nfs-utils_2.6.2.bb
@@ -32,6 +32,7 @@  SRC_URI = "${KERNELORG_MIRROR}/linux/utils/nfs-utils/${PV}/nfs-utils-${PV}.tar.x
            file://clang-warnings.patch \
            file://0005-mountd-Check-for-return-of-stat-function.patch \
            file://0006-Fix-function-prototypes.patch \
+           file://0001-Replace-statfs64-with-statfs.patch \
            "
 SRC_URI[sha256sum] = "5200873e81c4d610e2462fc262fe18135f2dbe78b7979f95accd159ae64d5011"