Richard W.M. Jones
2011-Nov-11 17:24 UTC
[Libguestfs] virt-df: ext2/3/4 statvfs(2) output changed between two recent Linux kernels (3.2.0)
[Jim, as coreutils developer, this might interest you] In libguestfs we run some quite detailed checks of the output of the statvfs system call for our tool "virt-df". I noticed that the output of virt-df changed slightly. Narrowing it down, the difference only happens between: Fedora kernel 3.2.0-0.rc0.git4.1.fc17 (3rd Nov) Fedora kernel 3.2.0-0.rc1.git2.1.fc17 (11th Nov) With 3.2.0-0.rc0.git4.1.fc17, and all earlier versions, the output of statvfs(2) on a freshly created 20M ext2 filesystem is: bsize: 1024 frsize: 1024 blocks: 19827 <-- NB bfree: 19655 bavail: 18631 files: 5136 ffree: 5125 favail: 5125 fsid: 1411286354856931562 flag: 4096 namemax: 255 With 3.2.0-0.rc1.git2.1.fc17, it changed to: bsize: 1024 frsize: 1024 blocks: 19939 <-- NB bfree: 19655 bavail: 18631 files: 5136 ffree: 5125 favail: 5125 fsid: -9088586685126948527 flag: 4096 namemax: 255 I am able to demonstrate the difference by keeping every other package identical, and just booting the two different kernels. As far as I know, everything else including e2fsprogs is completely identical. Reproducer: export FEBOOTSTRAP_KERNEL=/boot/vmlinuz-<version> guestfish sparse /tmp/test.img 20M : run : \ mkfs ext2 /dev/sda : mount /dev/sda / : statvfs / I tracked this down to the way the filesystem overhead is calculated. It changed slightly in the commit below. The description seems to be wrong; it seems to affect any filesystem going through the ext4 driver (this driver is used for ext2 & ext3 in recent Fedora), and doesn't appear to have anything to do with 'bigalloc'. commit f975d6bcc7a698a10cc755115e27d3612dcfe322 Author: Theodore Ts'o <tytso at mit.edu> Date: Fri Sep 9 19:00:51 2011 -0400 ext4: teach ext4_statfs() to deal with clusters if bigalloc is enabled Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones New in Fedora 11: Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 70 libraries supprt'd http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw
Jim Meyering
2011-Nov-13 10:21 UTC
[Libguestfs] virt-df: ext2/3/4 statvfs(2) output changed between two recent Linux kernels (3.2.0)
Richard W.M. Jones wrote:> [Jim, as coreutils developer, this might interest you] > > In libguestfs we run some quite detailed checks of the output of the > statvfs system call for our tool "virt-df". I noticed that the output > of virt-df changed slightly. > > Narrowing it down, the difference only happens between: > > Fedora kernel 3.2.0-0.rc0.git4.1.fc17 (3rd Nov) > Fedora kernel 3.2.0-0.rc1.git2.1.fc17 (11th Nov) > > With 3.2.0-0.rc0.git4.1.fc17, and all earlier versions, the output of > statvfs(2) on a freshly created 20M ext2 filesystem is: > > bsize: 1024 > frsize: 1024 > blocks: 19827 <-- NB > bfree: 19655 > bavail: 18631 > files: 5136 > ffree: 5125 > favail: 5125 > fsid: 1411286354856931562 > flag: 4096 > namemax: 255 > > With 3.2.0-0.rc1.git2.1.fc17, it changed to: > > bsize: 1024 > frsize: 1024 > blocks: 19939 <-- NBGood catch!> bfree: 19655 > bavail: 18631 > files: 5136 > ffree: 5125 > favail: 5125 > fsid: -9088586685126948527 > flag: 4096 > namemax: 255 > > I am able to demonstrate the difference by keeping every other package > identical, and just booting the two different kernels. As far as I > know, everything else including e2fsprogs is completely identical. > > Reproducer: > export FEBOOTSTRAP_KERNEL=/boot/vmlinuz-<version> > guestfish sparse /tmp/test.img 20M : run : \ > mkfs ext2 /dev/sda : mount /dev/sda / : statvfs / > > I tracked this down to the way the filesystem overhead is calculated. > It changed slightly in the commit below. The description seems to be > wrong; it seems to affect any filesystem going through the ext4 driver > (this driver is used for ext2 & ext3 in recent Fedora), and doesn't > appear to have anything to do with 'bigalloc'. > > commit f975d6bcc7a698a10cc755115e27d3612dcfe322 > Author: Theodore Ts'o <tytso at mit.edu> > Date: Fri Sep 9 19:00:51 2011 -0400 > > ext4: teach ext4_statfs() to deal with clusters if bigalloc is enabledNice detective work. Even if it's only a mere 0.5% difference, it seems like something that should be announced more clearly -- that is, assuming it was indeed intended. If bigalloc-related changes should not induce such changes in an ext2 file system, then maybe it's a bug.
Apparently Analagous Threads
- [PATCH v2 1/2] daemon: Reimplement statvfs API in OCaml.
- virtdf outputs on host differs from df in guest
- Re: virtdf outputs on host differs from df in guest
- Re: virtdf outputs on host differs from df in guest
- Re: virtdf outputs on host differs from df in guest