diff mbox series

btrfs-progs: Fix the issues btrfs-convert don't recognition ext4 i_{a,c,a}time_extra

Message ID 1629824687-21014-1-git-send-email-zhanglikernel@gmail.com (mailing list archive)
State New, archived
Headers show
Series btrfs-progs: Fix the issues btrfs-convert don't recognition ext4 i_{a,c,a}time_extra | expand

Commit Message

li zhang Aug. 24, 2021, 5:04 p.m. UTC
Hi, I ran convert-tests.sh, and it reported that the
019-ext4-copy-timestamps test failed. The log  is as
follows

...
mount -o loop -t ext4 btrfs-progs/tests/test.img btrfs-progs/tests/mnt
====== RUN CHECK touch btrfs-progs/tests/mnt/file
====== RUN CHECK stat btrfs-progs/tests/mnt/file
File: 'btrfs-progs/tests/mnt/file'
Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 700h/1792d  Inode: 13          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2021-08-24 22:10:21.999209679 +0800
Modify: 2021-08-24 22:10:21.999209679 +0800
Change: 2021-08-24 22:10:21.999209679 +0800
...
btrfs-progs/btrfs-convert btrfs-progs/tests/test.img
...
====== RUN CHECK mount -t btrfs -o loop btrfs-progs/tests/test.img btrfs-progs/tests/mnt
====== RUN CHECK stat btrfs-progs/tests/mnt/file
File: 'btrfs-progs/tests/mnt/file'
Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: 2ch/44d Inode: 267         Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:unlabeled_t:s0
Access: 2021-08-24 22:10:21.000000000 +0800
Modify: 2021-08-24 22:10:21.000000000 +0800
Change: 2021-08-24 22:10:21.000000000 +0800
...
atime on converted inode does not match
test failed for case 019-ext4-copy-timestamps

Obviously, the log says that btrfs-convert does not
support nanoseconds. I looked at the source code and
found that only if ext2_fs.h defines EXT4_EPOCH_MASK
btrfs-convert to support nanoseconds. But in e2fsprogs,
EXT4_EPOCH_MASK was introduced in v1.43, but in some
older versions, such as v1.40, e2fsprogs actually
supports nanoseconds. It seems that if struct ext2_inode_large
contains the i_atime_extra member, ext4 is supports
nanoseconds, so I updated the logic to determine whether the
current ext4 file system supports nanosecond precision.
In addition, I imported some definitions to encode and
decode tv_nsec (copied from e2fsprogs source code).
---
 configure.ac | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

Comments

David Sterba Aug. 26, 2021, 6:34 p.m. UTC | #1
On Wed, Aug 25, 2021 at 01:04:47AM +0800, Li Zhang wrote:
> Hi, I ran convert-tests.sh, and it reported that the
> 019-ext4-copy-timestamps test failed. The log  is as
> follows
> 
> ...
> mount -o loop -t ext4 btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> ====== RUN CHECK touch btrfs-progs/tests/mnt/file
> ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> File: 'btrfs-progs/tests/mnt/file'
> Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> Device: 700h/1792d  Inode: 13          Links: 1
> Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> Context: unconfined_u:object_r:unlabeled_t:s0
> Access: 2021-08-24 22:10:21.999209679 +0800
> Modify: 2021-08-24 22:10:21.999209679 +0800
> Change: 2021-08-24 22:10:21.999209679 +0800
> ...
> btrfs-progs/btrfs-convert btrfs-progs/tests/test.img
> ...
> ====== RUN CHECK mount -t btrfs -o loop btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> File: 'btrfs-progs/tests/mnt/file'
> Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> Device: 2ch/44d Inode: 267         Links: 1
> Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> Context: unconfined_u:object_r:unlabeled_t:s0
> Access: 2021-08-24 22:10:21.000000000 +0800
> Modify: 2021-08-24 22:10:21.000000000 +0800
> Change: 2021-08-24 22:10:21.000000000 +0800
> ...
> atime on converted inode does not match
> test failed for case 019-ext4-copy-timestamps
> 
> Obviously, the log says that btrfs-convert does not
> support nanoseconds. I looked at the source code and
> found that only if ext2_fs.h defines EXT4_EPOCH_MASK
> btrfs-convert to support nanoseconds. But in e2fsprogs,
> EXT4_EPOCH_MASK was introduced in v1.43, but in some
> older versions, such as v1.40, e2fsprogs actually
> supports nanoseconds. It seems that if struct ext2_inode_large
> contains the i_atime_extra member, ext4 is supports
> nanoseconds, so I updated the logic to determine whether the
> current ext4 file system supports nanosecond precision.
> In addition, I imported some definitions to encode and
> decode tv_nsec (copied from e2fsprogs source code).

So it's supportable even up to the old versions (1.40 was released in
2007) with the updated detection, nice.

> ---
>  configure.ac | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/configure.ac b/configure.ac
> index c4fa461..20297c5 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -253,7 +253,21 @@ AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [],
>  AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK],
>  		[AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1],
>  			   [Define to 1 if e2fsprogs defines EXT4_EPOCH_MASK])],
> -		[AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably old e2fsprogs, no 64bit time precision of converted images])])
> +        [have_ext4_epoch_mask_define=no])
> +
> +AS_IF([test "x$have_ext4_epoch_mask_define" = xno], [
> +    AC_CHECK_MEMBERS([struct ext2_inode_large.i_atime_extra],
> +        [
> +            AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1], [Define to 1 if ext2_inode_large includes i_atime_extra]),
> +            AC_DEFINE([EXT4_EPOCH_BITS], [2],[for encode and decode tv_nsec in ext2 inode]),
> +            AC_DEFINE([EXT4_EPOCH_MASK], [((1 << EXT4_EPOCH_BITS) - 1)], [For encode and decode tv_nsec info in ext2 inode]),
> +            AC_DEFINE([EXT4_NSEC_MASK],  [(~0UL << EXT4_EPOCH_BITS)], [For encode and decode tv_nsec info in ext2 inode]),
> +            AC_DEFINE([inode_includes(size, field)],[m4_normalize[(size >= (sizeof(((struct ext2_inode_large *)0)->field) + offsetof(struct ext2_inode_large, field)))]],

The "," can't be at the end of the AC_DEFINE lines, this does not
produce valid ./configure and fails with

checking for FIEMAP_EXTENT_SHARED defined in linux/fiemap.h... yes                                        
checking for EXT4_EPOCH_MASK defined in ext2fs/ext2_fs.h... yes                                           
checking for struct ext2_inode_large.i_atime_extra... yes     
./configure: line 6487: ,: command not found         
./configure: line 6490: ,: command not found        
./configure: line 6493: ,: command not found                                                              
./configure: line 6496: ,: command not found

because the "," appear in the final file as separate commands. Removing them
produces valid script and the detection works.

Added to devel, thanks.
li zhang Aug. 28, 2021, 4:41 a.m. UTC | #2
On Thu, Aug 26, 2021 at 08:34:06PM +0200, David Sterba wrote:
> On Wed, Aug 25, 2021 at 01:04:47AM +0800, Li Zhang wrote:
> > Hi, I ran convert-tests.sh, and it reported that the
> > 019-ext4-copy-timestamps test failed. The log  is as
> > follows
> > 
> > ...
> > mount -o loop -t ext4 btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> > ====== RUN CHECK touch btrfs-progs/tests/mnt/file
> > ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> > File: 'btrfs-progs/tests/mnt/file'
> > Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> > Device: 700h/1792d  Inode: 13          Links: 1
> > Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> > Context: unconfined_u:object_r:unlabeled_t:s0
> > Access: 2021-08-24 22:10:21.999209679 +0800
> > Modify: 2021-08-24 22:10:21.999209679 +0800
> > Change: 2021-08-24 22:10:21.999209679 +0800
> > ...
> > btrfs-progs/btrfs-convert btrfs-progs/tests/test.img
> > ...
> > ====== RUN CHECK mount -t btrfs -o loop btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> > ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> > File: 'btrfs-progs/tests/mnt/file'
> > Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> > Device: 2ch/44d Inode: 267         Links: 1
> > Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> > Context: unconfined_u:object_r:unlabeled_t:s0
> > Access: 2021-08-24 22:10:21.000000000 +0800
> > Modify: 2021-08-24 22:10:21.000000000 +0800
> > Change: 2021-08-24 22:10:21.000000000 +0800
> > ...
> > atime on converted inode does not match
> > test failed for case 019-ext4-copy-timestamps
> > 
> > Obviously, the log says that btrfs-convert does not
> > support nanoseconds. I looked at the source code and
> > found that only if ext2_fs.h defines EXT4_EPOCH_MASK
> > btrfs-convert to support nanoseconds. But in e2fsprogs,
> > EXT4_EPOCH_MASK was introduced in v1.43, but in some
> > older versions, such as v1.40, e2fsprogs actually
> > supports nanoseconds. It seems that if struct ext2_inode_large
> > contains the i_atime_extra member, ext4 is supports
> > nanoseconds, so I updated the logic to determine whether the
> > current ext4 file system supports nanosecond precision.
> > In addition, I imported some definitions to encode and
> > decode tv_nsec (copied from e2fsprogs source code).
> 
> So it's supportable even up to the old versions (1.40 was released in
> 2007) with the updated detection, nice.
> 
> > ---
> >  configure.ac | 16 +++++++++++++++-
> >  1 file changed, 15 insertions(+), 1 deletion(-)
> > 
> > diff --git a/configure.ac b/configure.ac
> > index c4fa461..20297c5 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -253,7 +253,21 @@ AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [],
> >  AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK],
> >  		[AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1],
> >  			   [Define to 1 if e2fsprogs defines EXT4_EPOCH_MASK])],
> > -		[AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably old e2fsprogs, no 64bit time precision of converted images])])
> > +        [have_ext4_epoch_mask_define=no])
> > +
> > +AS_IF([test "x$have_ext4_epoch_mask_define" = xno], [
> > +    AC_CHECK_MEMBERS([struct ext2_inode_large.i_atime_extra],
> > +        [
> > +            AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1], [Define to 1 if ext2_inode_large includes i_atime_extra]),
> > +            AC_DEFINE([EXT4_EPOCH_BITS], [2],[for encode and decode tv_nsec in ext2 inode]),
> > +            AC_DEFINE([EXT4_EPOCH_MASK], [((1 << EXT4_EPOCH_BITS) - 1)], [For encode and decode tv_nsec info in ext2 inode]),
> > +            AC_DEFINE([EXT4_NSEC_MASK],  [(~0UL << EXT4_EPOCH_BITS)], [For encode and decode tv_nsec info in ext2 inode]),
> > +            AC_DEFINE([inode_includes(size, field)],[m4_normalize[(size >= (sizeof(((struct ext2_inode_large *)0)->field) + offsetof(struct ext2_inode_large, field)))]],
> 
> The "," can't be at the end of the AC_DEFINE lines, this does not
> produce valid ./configure and fails with
> 
> checking for FIEMAP_EXTENT_SHARED defined in linux/fiemap.h... yes                                        
> checking for EXT4_EPOCH_MASK defined in ext2fs/ext2_fs.h... yes                                           
> checking for struct ext2_inode_large.i_atime_extra... yes     
> ./configure: line 6487: ,: command not found         
> ./configure: line 6490: ,: command not found        
> ./configure: line 6493: ,: command not found                                                              
> ./configure: line 6496: ,: command not found
> 
> because the "," appear in the final file as separate commands. Removing them
> produces valid script and the detection works.
> 
> Added to devel, thanks.

Cool, thanks!

Is there any possibility that the version of the GNU build system caused
the ./configure error
to be generated? On my machine, I produced a valid ./configure, and my
compilation
environment is as follows:
aclocal:    aclocal (GNU automake) 1.13.4
autoconf:   autoconf (GNU Autoconf) 2.69
autoheader: autoheader (GNU Autoconf) 2.69
automake:   automake (GNU automake) 1.13.4
OS: centos 7.6
li zhang Aug. 28, 2021, 3:16 p.m. UTC | #3
Cool, thanks!

Is there any possibility that the version of the GNU build system caused
the ./configure error
to be generated? On my machine, I produced a valid ./configure, and my
compilation
environment is as follows:
aclocal:    aclocal (GNU automake) 1.13.4
autoconf:   autoconf (GNU Autoconf) 2.69
autoheader: autoheader (GNU Autoconf) 2.69
automake:   automake (GNU automake) 1.13.4
OS: centos 7.6

David Sterba <dsterba@suse.cz> 于2021年8月27日周五 上午2:36写道:
>
> On Wed, Aug 25, 2021 at 01:04:47AM +0800, Li Zhang wrote:
> > Hi, I ran convert-tests.sh, and it reported that the
> > 019-ext4-copy-timestamps test failed. The log  is as
> > follows
> >
> > ...
> > mount -o loop -t ext4 btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> > ====== RUN CHECK touch btrfs-progs/tests/mnt/file
> > ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> > File: 'btrfs-progs/tests/mnt/file'
> > Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> > Device: 700h/1792d  Inode: 13          Links: 1
> > Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> > Context: unconfined_u:object_r:unlabeled_t:s0
> > Access: 2021-08-24 22:10:21.999209679 +0800
> > Modify: 2021-08-24 22:10:21.999209679 +0800
> > Change: 2021-08-24 22:10:21.999209679 +0800
> > ...
> > btrfs-progs/btrfs-convert btrfs-progs/tests/test.img
> > ...
> > ====== RUN CHECK mount -t btrfs -o loop btrfs-progs/tests/test.img btrfs-progs/tests/mnt
> > ====== RUN CHECK stat btrfs-progs/tests/mnt/file
> > File: 'btrfs-progs/tests/mnt/file'
> > Size: 0           Blocks: 0          IO Block: 4096   regular empty file
> > Device: 2ch/44d Inode: 267         Links: 1
> > Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
> > Context: unconfined_u:object_r:unlabeled_t:s0
> > Access: 2021-08-24 22:10:21.000000000 +0800
> > Modify: 2021-08-24 22:10:21.000000000 +0800
> > Change: 2021-08-24 22:10:21.000000000 +0800
> > ...
> > atime on converted inode does not match
> > test failed for case 019-ext4-copy-timestamps
> >
> > Obviously, the log says that btrfs-convert does not
> > support nanoseconds. I looked at the source code and
> > found that only if ext2_fs.h defines EXT4_EPOCH_MASK
> > btrfs-convert to support nanoseconds. But in e2fsprogs,
> > EXT4_EPOCH_MASK was introduced in v1.43, but in some
> > older versions, such as v1.40, e2fsprogs actually
> > supports nanoseconds. It seems that if struct ext2_inode_large
> > contains the i_atime_extra member, ext4 is supports
> > nanoseconds, so I updated the logic to determine whether the
> > current ext4 file system supports nanosecond precision.
> > In addition, I imported some definitions to encode and
> > decode tv_nsec (copied from e2fsprogs source code).
>
> So it's supportable even up to the old versions (1.40 was released in
> 2007) with the updated detection, nice.
>
> > ---
> >  configure.ac | 16 +++++++++++++++-
> >  1 file changed, 15 insertions(+), 1 deletion(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index c4fa461..20297c5 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -253,7 +253,21 @@ AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [],
> >  AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK],
> >               [AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1],
> >                          [Define to 1 if e2fsprogs defines EXT4_EPOCH_MASK])],
> > -             [AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably old e2fsprogs, no 64bit time precision of converted images])])
> > +        [have_ext4_epoch_mask_define=no])
> > +
> > +AS_IF([test "x$have_ext4_epoch_mask_define" = xno], [
> > +    AC_CHECK_MEMBERS([struct ext2_inode_large.i_atime_extra],
> > +        [
> > +            AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1], [Define to 1 if ext2_inode_large includes i_atime_extra]),
> > +            AC_DEFINE([EXT4_EPOCH_BITS], [2],[for encode and decode tv_nsec in ext2 inode]),
> > +            AC_DEFINE([EXT4_EPOCH_MASK], [((1 << EXT4_EPOCH_BITS) - 1)], [For encode and decode tv_nsec info in ext2 inode]),
> > +            AC_DEFINE([EXT4_NSEC_MASK],  [(~0UL << EXT4_EPOCH_BITS)], [For encode and decode tv_nsec info in ext2 inode]),
> > +            AC_DEFINE([inode_includes(size, field)],[m4_normalize[(size >= (sizeof(((struct ext2_inode_large *)0)->field) + offsetof(struct ext2_inode_large, field)))]],
>
> The "," can't be at the end of the AC_DEFINE lines, this does not
> produce valid ./configure and fails with
>
> checking for FIEMAP_EXTENT_SHARED defined in linux/fiemap.h... yes
> checking for EXT4_EPOCH_MASK defined in ext2fs/ext2_fs.h... yes
> checking for struct ext2_inode_large.i_atime_extra... yes
> ./configure: line 6487: ,: command not found
> ./configure: line 6490: ,: command not found
> ./configure: line 6493: ,: command not found
> ./configure: line 6496: ,: command not found
>
> because the "," appear in the final file as separate commands. Removing them
> produces valid script and the detection works.
>
> Added to devel, thanks.
David Sterba Aug. 30, 2021, 9:34 a.m. UTC | #4
On Sat, Aug 28, 2021 at 12:41:19PM +0800, li zhang wrote:
> Is there any possibility that the version of the GNU build system caused
> the ./configure error
> to be generated? On my machine, I produced a valid ./configure, and my
> compilation
> environment is as follows:
> aclocal:    aclocal (GNU automake) 1.13.4
> autoconf:   autoconf (GNU Autoconf) 2.69
> autoheader: autoheader (GNU Autoconf) 2.69
> automake:   automake (GNU automake) 1.13.4
> OS: centos 7.6

You'd have to run the ./configure script or inspect it manually though
it could be hard to locate the lines in the generated script.

I get the following diff, the commas are interprted as shell commands.

--- configure-bad       2021-08-30 11:35:22.034446343 +0200
+++ configure-good      2021-08-30 11:34:19.130281370 +0200
@@ -6469,6 +6469,8 @@ else
   have_ext4_epoch_mask_define=no
 fi
 
+have_ext4_epoch_mask_define=no
+
 if test "x$have_ext4_epoch_mask_define" = xno; then :
 
     ac_fn_c_check_member "$LINENO" "struct ext2_inode_large" "i_atime_extra" "ac_cv_member_struct_ext2_inode_large_i_atime_extra" "#include <ext2fs/ext2_fs.h>
@@ -6482,16 +6484,16 @@ _ACEOF
 
 
 $as_echo "#define HAVE_EXT4_EPOCH_MASK_DEFINE 1" >>confdefs.h
-,
+
 
 $as_echo "#define EXT4_EPOCH_BITS 2" >>confdefs.h
-,
+
 
 $as_echo "#define EXT4_EPOCH_MASK ((1 << EXT4_EPOCH_BITS) - 1)" >>confdefs.h
-,
+
 
 $as_echo "#define EXT4_NSEC_MASK (~0UL << EXT4_EPOCH_BITS)" >>confdefs.h
-,
+
 
 $as_echo "#define inode_includes(size, field) (size >= (sizeof(((struct ext2_inode_large *)0)->field) + offsetof(struct ext2_inode_large, field)))" >>confdefs.h
---
diff mbox series

Patch

diff --git a/configure.ac b/configure.ac
index c4fa461..20297c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -253,7 +253,21 @@  AX_CHECK_DEFINE([linux/fiemap.h], [FIEMAP_EXTENT_SHARED], [],
 AX_CHECK_DEFINE([ext2fs/ext2_fs.h], [EXT4_EPOCH_MASK],
 		[AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1],
 			   [Define to 1 if e2fsprogs defines EXT4_EPOCH_MASK])],
-		[AC_MSG_WARN([no definition of EXT4_EPOCH_MASK found, probably old e2fsprogs, no 64bit time precision of converted images])])
+        [have_ext4_epoch_mask_define=no])
+
+AS_IF([test "x$have_ext4_epoch_mask_define" = xno], [
+    AC_CHECK_MEMBERS([struct ext2_inode_large.i_atime_extra],
+        [
+            AC_DEFINE([HAVE_EXT4_EPOCH_MASK_DEFINE], [1], [Define to 1 if ext2_inode_large includes i_atime_extra]),
+            AC_DEFINE([EXT4_EPOCH_BITS], [2],[for encode and decode tv_nsec in ext2 inode]),
+            AC_DEFINE([EXT4_EPOCH_MASK], [((1 << EXT4_EPOCH_BITS) - 1)], [For encode and decode tv_nsec info in ext2 inode]),
+            AC_DEFINE([EXT4_NSEC_MASK],  [(~0UL << EXT4_EPOCH_BITS)], [For encode and decode tv_nsec info in ext2 inode]),
+            AC_DEFINE([inode_includes(size, field)],[m4_normalize[(size >= (sizeof(((struct ext2_inode_large *)0)->field) + offsetof(struct ext2_inode_large, field)))]],
+                [For encode and decode tv_nsec info in ext2 inode])
+        ],
+        [AC_MSG_WARN([It seems that ext2_inode_large don't includes tv_nsec related info, probably old e2fsprogs, no 64bit time precision of converted images])],
+        [[#include <ext2fs/ext2_fs.h>]])
+])
 
 AC_CHECK_HEADER(linux/blkzoned.h, [blkzoned_found=yes], [blkzoned_found=no])
 AC_CHECK_MEMBER([struct blk_zone.capacity], [blkzoned_capacity=yes], [blkzoned_capacity=no], [[#include <linux/blkzoned.h>]])