diff --git a/src/modules/files/configure.in b/src/modules/files/configure.in
index d3c840e8ca556453c929920bc8b106a72b319848..96d80ac94922e405c323fd2e4a9a753b54bb07c8 100644
--- a/src/modules/files/configure.in
+++ b/src/modules/files/configure.in
@@ -135,6 +135,7 @@ int main()
   AC_MSG_CHECKING(if the struct statfs has the member f_bavail)
   AC_CACHE_VAL(pike_cv_struct_statfs_f_bavail, [
     AC_TRY_COMPILE([
+#include <sys/stat.h>
 #ifdef HAVE_SYS_MOUNT_H
 #include <sys/mount.h>
 #endif
diff --git a/src/modules/files/efuns.c b/src/modules/files/efuns.c
index 9f146bb4751b981d0212b519a3001cd871902259..2f752643d7ad0f4214754ffd872f86bccf2d4e84 100644
--- a/src/modules/files/efuns.c
+++ b/src/modules/files/efuns.c
@@ -189,11 +189,9 @@ void f_filesystem_stat(INT32 args)
     push_int(st.f_blocks);
     push_text("bfree");
     push_int(st.f_bfree);
-    push_text("bavail");
 #ifdef HAVE_STATFS_F_BAVAIL
+    push_text("bavail");
     push_int(st.f_bavail);
-#else
-    push_int(st.f_bfree);
 #endif /* HAVE_STATFS_F_BAVAIL */
     push_text("files");
     push_int(st.f_files);
@@ -201,7 +199,11 @@ void f_filesystem_stat(INT32 args)
     push_int(st.f_ffree);
     push_text("favail");
     push_int(st.f_ffree);
+#ifdef HAVE_STATFS_F_BAVAIL
     f_aggregate_mapping(7*2);
+#else
+    f_aggregate_mapping(6*2);
+#endif /* HAVE_STATFS_F_BAVAIL */
 #else
 #ifdef HAVE_USTAT
     push_text("bfree");