Re: [PATCH] xfstests: replace custom __u64 definition with uint64_t

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



On 21/12/23 10:42 pm, Darrick J. Wong wrote:

On Thu, Dec 21, 2023 at 11:42:31AM +0530, Disha Goel wrote:
In some distributions, __u64 is already defined in system header files,
causing compilation errors when building xfstest.

	# make
	    [CC]    ext4_resize
	ext4_resize.c:17:28: error: conflicting types for '__u64'
	 typedef unsigned long long __u64;
	                            ^~~~~
	In file included from /usr/include/asm/types.h:26:0,
	                 from /usr/include/linux/types.h:5,
	                 from /usr/include/linux/mount.h:4,
	                 from /usr/include/sys/mount.h:32,
	                 from ext4_resize.c:15:
	/usr/include/asm-generic/int-l64.h:30:23: note: previous declaration of '__u64' was here
	 typedef unsigned long __u64;
                        ^~~~~

To address this issue, replace the custom definition of __u64 with the
standard uint64_t type from <stdint.h>. uint64_t is part of the C99
standard, offering a standardised approach for representing unsigned
64-bit integers. This modification enhances code consistency and
ensures compatibility with standard types.
...but isn't consistent with the definition in the kernel uapi headers.
ioctls explicitly use __u64, not uint64_t, and there are a few arches
(apparently) where __u64 ends up an unsigned long long but uint64_t ends
up an unsigned long, and the reverse.

Thanks for reviewing the patch. I will take care of this and address in v2.

Tested on various distributions on Power architecture, by successfully
compiling xfstest. Additionally, verified the compatibility by running
ext4/033 and ext4/056 tests, both of which use ext4_resize and
observed successful test execution.

         # make
             [CC]    detached_mounts_propagation
             [CC]    ext4_resize
             [CC]    t_readdir_3

Signed-off-by: Disha Goel <disgoel@xxxxxxxxxxxxx>
---
  src/ext4_resize.c | 6 ++----
  1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/ext4_resize.c b/src/ext4_resize.c
index 78b66432..6e60ee5b 100644
--- a/src/ext4_resize.c
+++ b/src/ext4_resize.c
@@ -14,10 +14,8 @@
  #include <sys/ioctl.h>
  #include <sys/mount.h>
Why not #include <linux/ext4.h>, which gets you both the __u64 typedef
and EXT4_IOC_RESIZE_FS?

--D

The #include <linux/ext4.h> got added in kernel 6.4 and distros which
I'm testing does not have <linux/ext4.h> present in kernel headers.
We can add #include <linux/types.h> which also gets the __u64 typedef.

Let me know your thoughts.

-typedef unsigned long long __u64;
-
  #ifndef EXT4_IOC_RESIZE_FS
-#define EXT4_IOC_RESIZE_FS		_IOW('f', 16, __u64)
+#define EXT4_IOC_RESIZE_FS		_IOW('f', 16, uint64_t)
  #endif
#define pr_error(fmt, ...) do { \
@@ -31,7 +29,7 @@ static void usage(void)
int main(int argc, char **argv)
  {
-	__u64	new_size;
+	uint64_t	new_size;
  	int	error, fd;
  	char	*mnt_dir = NULL, *tmp = NULL;
--
2.39.1






[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux