Varnish on FreeBSD

Olivier Nicole on at
Wed Apr 1 09:47:50 CEST 2009

Hi again,

After some diging I have the answer.

On FreeBSD, from the man page of fstatvfs:

           f_bsize    The preferred length of I/O requests for files on this
                      file system.  (Corresponds to the f_iosize member of
                      struct statfs.)

It is not said that f_bsize is the block size, while f_bavail is given
in blocks. So in the function smf_fsspace:

	return (fsst.f_bsize * fsst.f_bavail);

is over estimating.

On Linux it seems that f_bsize is the block size, but I have no man
fstatvfs available at hand.

I ran a simple test:

#include <sys/statvfs.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>

main () {
  int fp;
  int r;
  struct statvfs buf;
    r=statvfs("/tmp/on", &buf);
    if (r==0) {
      printf("%lu %llu\n", buf.f_bsize, buf.f_bavail);
    else {

$ a.out
16384 2297104
$ df /
Filesystem    1K-blocks  Used   Avail Capacity  Mounted on
/dev/mfid0s1a   5077038 76668 4594208     2%    /

If the block size of 2KB, the results are consistant.

Best regards,


More information about the varnish-misc mailing list