Project

General

Profile

Actions

Bug #1619

closed

weird problem with statvfs() on a hammer filesystems

Added by Johannes.Hofmann over 14 years ago. Updated over 14 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

Hi,

I'm seeing a weird problem with statvfs() on a hammer filesystems.
With this little test program:

#include <inttypes.h>
#include <stdio.h>
#include <sys/statvfs.h>

int main(int argc, char **argv) {
struct statvfs fsbuf;

if (statvfs(argv[1], &fsbuf) < 0)
err(1, "Can't statvfs() `%s'", argv[1]);
fprintf(stderr, "statvfs %s, bavail %lld, frsize %lld\n",
argv[1], fsbuf.f_bavail, fsbuf.f_frsize);
}

I get fsbuf.f_bavail == 0 on a freshly mounted hammer FS:

vkernel-leaf# dd if=/dev/zero of=hammer.img bs=1024 count=194000
vkernel-leaf# vnconfig vn0 hammer.img
vkernel-leaf# newfs_hammer -L foo -f /dev/vn0
vkernel-leaf# mount_hammer /dev/vn0 /mnt/
vkernel-leaf# ./statvfs /mnt/
statvfs /mnt/, bavail 0, frsize 16384

After doing df -k, things are back to normal:

vkernel-leaf# df -k
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/vkd0s0a 516054 503790 -29020 106% /
devfs 1 1 0 100% /dev
foo 65536 210016 -144480 320% /mnt
vkernel-leaf# ./statvfs /mnt/
statvfs /mnt/, bavail -9030, frsize 16384

I added some kprintf()s:

diff --git a/sys/vfs/hammer/hammer_vfsops.c b/sys/vfs/hammer/hammer_vfsops.c
index 0b6139e..f94bfed 100644
--- a/sys/vfs/hammer/hammer_vfsops.c
+++ b/sys/vfs/hammer/hammer_vfsops.c
@ -921,10 +921,17 @ hammer_vfs_statvfs(struct mount *mp, struct statvfs *sbp, struct ucred *cred)
hammer_rel_volume(volume, 0);

mp->mnt_vstat.f_bfree = (bfree - breserved) / HAMMER_BUFSIZE;

+kprintf("hammer_vfs_statvfs: mp->mnt_vstat.f_bfree %lld\n", mp->mnt_vstat.f_bfree);

mp->mnt_vstat.f_bavail = mp->mnt_stat.f_bfree;

+kprintf("hammer_vfs_statvfs: mp->mnt_vstat.f_bavail %lld\n", mp->mnt_vstat.f_bavail);

if (mp->mnt_vstat.f_files < 0)
mp->mnt_vstat.f_files = 0;
*sbp = mp->mnt_vstat;
+
return(0);
}

With those I get:

hammer_vfs_statvfs: mp->mnt_vstat.f_bfree 9721495
hammer_vfs_statvfs: mp->mnt_vstat.f_bavail 0

What am I missing?

Cheers,
Johannes

PS: The original problem is that pkgin is reporting not enough space to
install packages.

Actions #1

Updated by dillon over 14 years ago

:Hi,
:
:I'm seeing a weird problem with statvfs() on a hammer filesystems.
:With this little test program:
:
:..
:
:I get fsbuf.f_bavail == 0 on a freshly mounted hammer FS:

Ach.  I think I see it.  Try the patch below.
-Matt

diff --git a/sys/vfs/hammer/hammer_vfsops.c b/sys/vfs/hammer/hammer_vfsops.c
index fa478bf..79321cd 100644
--- a/sys/vfs/hammer/hammer_vfsops.c
+++ b/sys/vfs/hammer/hammer_vfsops.c
@ -935,7 +935,7 @ hammer_vfs_statvfs(struct mount *mp, struct statvfs *sbp, struct ucred *cred)
hammer_rel_volume(volume, 0);

mp->mnt_vstat.f_bfree = (bfree - breserved) / HAMMER_BUFSIZE;
- mp->mnt_vstat.f_bavail = mp->mnt_stat.f_bfree;
+ mp->mnt_vstat.f_bavail = mp->mnt_vstat.f_bfree;
if (mp->mnt_vstat.f_files < 0)
mp->mnt_vstat.f_files = 0;
*sbp = mp->mnt_vstat;
Actions #2

Updated by Johannes.Hofmann over 14 years ago

Matthew Dillon <> wrote:

:Hi,
:
:I'm seeing a weird problem with statvfs() on a hammer filesystems.
:With this little test program:
:
:..
:
:I get fsbuf.f_bavail == 0 on a freshly mounted hammer FS:

Ach. I think I see it. Try the patch below.

-Matt

diff --git a/sys/vfs/hammer/hammer_vfsops.c b/sys/vfs/hammer/hammer_vfsops.c
index fa478bf..79321cd 100644
--- a/sys/vfs/hammer/hammer_vfsops.c
+++ b/sys/vfs/hammer/hammer_vfsops.c
@ -935,7 +935,7 @ hammer_vfs_statvfs(struct mount *mp, struct statvfs *sbp, struct ucred *cred)
hammer_rel_volume(volume, 0);

mp->mnt_vstat.f_bfree = (bfree - breserved) / HAMMER_BUFSIZE;
- mp->mnt_vstat.f_bavail = mp->mnt_stat.f_bfree;
+ mp->mnt_vstat.f_bavail = mp->mnt_vstat.f_bfree;
if (mp->mnt_vstat.f_files < 0)
mp->mnt_vstat.f_files = 0;
*sbp = mp->mnt_vstat;

Haha. That's it. I was staring at this line for quite some time and
started to blame compiler bugs and cosmic rays.

Thanks,
Johannes

Actions #3

Updated by tuxillo over 14 years ago

Fix in commit c07636592ca4cdb9af0f0dc65a13221577fad67b

Actions

Also available in: Atom PDF