Note: This is a public test instance of Red Hat Bugzilla. The data contained within is a snapshot of the live data so any changes you make will not be reflected in the production Bugzilla. Email is disabled so feel free to test any aspect of the site that you want. File any problems you find or give feedback at bugzilla.redhat.com.
Bug 1733743 - [armv7] Unix.LargeFile.ftruncate 2^32 is miscompiled
Summary: [armv7] Unix.LargeFile.ftruncate 2^32 is miscompiled
Keywords:
Status: CLOSED RAWHIDE
Alias: None
Product: Fedora
Classification: Fedora
Component: ocaml
Version: rawhide
Hardware: armv7hl
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Richard W.M. Jones
QA Contact: Fedora Extras Quality Assurance
URL:
Whiteboard:
Depends On:
Blocks: ARMTracker TRACKER-bugs-affecting-libguestfs
TreeView+ depends on / blocked
 
Reported: 2019-07-28 09:06 UTC by Richard W.M. Jones
Modified: 2019-07-31 20:10 UTC (History)
10 users (show)

Fixed In Version:
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2019-07-31 20:10:32 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Github ocaml ocaml issues 8841 0 None None None 2019-07-29 08:38:44 UTC

Description Richard W.M. Jones 2019-07-28 09:06:37 UTC
Description of problem:

$ rm -f root
$ truncate -s 4G root
$ /usr/sbin/mke2fs -t ext2 -Fq root
mke2fs: Device size reported to be zero.  Invalid partition specified, or
	partition table wasn't reread after running fdisk, due to
	a modified partition being busy and in use.  You may need to reboot
	to re-read your partition table.

This only happens on armv7, not on other architectures.

Version-Release number of selected component (if applicable):

e2fsprogs 1.45.2-1.fc31

How reproducible:

Happened twice.

Steps to Reproduce:
1. See above.

Comment 1 Alessio 2019-07-28 12:54:27 UTC
(In reply to Richard W.M. Jones from comment #0)
> Description of problem:
> 
> $ rm -f root
> $ truncate -s 4G root
> $ /usr/sbin/mke2fs -t ext2 -Fq root
> mke2fs: Device size reported to be zero.  Invalid partition specified, or
> 	partition table wasn't reread after running fdisk, due to
> 	a modified partition being busy and in use.  You may need to reboot
> 	to re-read your partition table.

I read your message on the devel mailing list.
Issuing the above commands on a Raspberry Pi 3 these are the results

$ uname -a
Linux rpi3 5.3.0-0.rc1.git3.1.fc31.armv7hl #1 SMP Thu Jul 25 15:54:45 UTC 2019 armv7l armv7l armv7l GNU/Linux
$ cat /etc/redhat-release 
Fedora release 31 (Rawhide)
$ rpm -qv e2fsprogs
e2fsprogs-1.45.2-1.fc31.armv7hl

$ rm -f root
$ truncate -s 4G root
$ /usr/sbin/mke2fs -t ext2 -Fq root
warning: Unable to get device geometry for root

Comment 2 Richard W.M. Jones 2019-07-28 13:28:23 UTC
Interesting thanks.  I wonder why this fails in Koji :-?  I guess I've got to do a bit more testing ...

Comment 3 Alessio 2019-07-28 15:26:32 UTC
FWIW

$ rm -f root 
$ touch root
$ /usr/sbin/mke2fs -t ext4 -Fq root
mke2fs: Device size reported to be zero.  Invalid partition specified, or
	partition table wasn't reread after running fdisk, due to
	a modified partition being busy and in use.  You may need to reboot
	to re-read your partition table.

Comment 4 Richard W.M. Jones 2019-07-28 16:05:58 UTC
I modified a Koji build to run supermin, but also print the kernel etc.

Linux buildvm-armv7-05.arm.fedoraproject.org 5.2.2-200.fc30.armv7hl+lpae #1 SMP Sun Jul 21 15:36:24 UTC 2019 armv7l armv7l armv7l GNU/Linux

e2fsprogs-1.45.2-1.fc31.armv7hl

supermin: ext2: creating empty ext2 filesystem 'd2.4r818cjh/root'
RPM build errors:
BUILDSTDERR: mke2fs 1.45.2 (27-May-2019)
BUILDSTDERR: mke2fs: Device size reported to be zero.  Invalid partition specified, or
BUILDSTDERR: 	partition table wasn't reread after running fdisk, due to
BUILDSTDERR: 	a modified partition being busy and in use.  You may need to reboot
BUILDSTDERR: 	to re-read your partition table.
BUILDSTDERR: supermin: /usr/sbin/mke2fs -t ext2 -F 'd2.4r818cjh/root': command failed, see earlier errors
BUILDSTDERR: error: Bad exit status from /var/tmp/rpm-tmp.hycBi4 (%check)
BUILDSTDERR:     Bad exit status from /var/tmp/rpm-tmp.hycBi4 (%check)

All that supermin is doing here is basically the commands as outlined above:

https://github.com/libguestfs/supermin/blob/c97b3917068597a0e68e88d9a905da766ade40da/src/format_ext2.ml#L40-L55

I wonder if there's some problem with the page cache, for example mke2fs is using O_DIRECT
but the previous write to the filesystem hasn't been committed yet.

Comment 5 Richard W.M. Jones 2019-07-28 16:06:40 UTC
(In reply to Alessio from comment #3)
> FWIW
> 
> $ rm -f root 
> $ touch root
> $ /usr/sbin/mke2fs -t ext4 -Fq root
> mke2fs: Device size reported to be zero.  Invalid partition specified, or
> 	partition table wasn't reread after running fdisk, due to
> 	a modified partition being busy and in use.  You may need to reboot
> 	to re-read your partition table.

This is expected because "touch" creates a zero length file.  See the code
linked in the previous comment for what we actually do to create a 4G file.

Comment 6 Richard W.M. Jones 2019-07-28 16:38:11 UTC
I tried to fsync the directory before calling mke2fs but it made no difference.

Comment 7 Richard W.M. Jones 2019-07-29 08:27:53 UTC
Oh lovely, this is actually a compiler bug.

$ cat test.ml
let size = Int64.shift_left 1L 32 in
Unix.LargeFile.ftruncate Unix.stdout size
$ ocamlopt unix.cmxa test.ml -o test
$ strace ./test > /tmp/file
...
ftruncate64(1, 0)                       = 0
               ^
               this should be 2^32

Comment 8 Richard W.M. Jones 2019-07-29 20:45:24 UTC
Proposed patch:
https://github.com/ocaml/ocaml/pull/8843

Will be included in OCaml 4.08.1 which we'll upgrade to when it is released.

Comment 9 Richard W.M. Jones 2019-07-31 12:07:45 UTC
Upstream fix:
https://github.com/ocaml/ocaml/commit/5e4b55d3bd3fdf3e7512c132ad36d103d7131e72


Note You need to log in before you can comment on or make changes to this bug.