--- samba-3.5.6.original/source3/smbd/trans2.c 2010-10-07 11:41:16.000000000 -0500 +++ samba-3.5.6/source3/smbd/trans2.c 2011-01-06 12:21:41.000000000 -0600 @@ -3274,6 +3274,36 @@ rc = SMB_VFS_STATVFS(conn, ".", &svfs); if (!rc) { + + { + uint64_t dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector; + + if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) != (uint64_t)-1) { + block_size = lp_block_size(snum); + if (bsize < block_size) { + uint64_t factor = block_size/bsize; + bsize = block_size; + dsize /= factor; + dfree /= factor; + } + if (bsize > block_size) { + uint64_t factor = bsize/block_size; + bsize = block_size; + dsize *= factor; + dfree *= factor; + } + bytes_per_sector = 512; + sectors_per_unit = bsize/bytes_per_sector; + + svfs.BlockSize = bsize; + svfs.TotalBlocks = dsize; + svfs.BlocksAvail = dfree; + svfs.UserBlocksAvail = dfree; + svfs.TotalFileNodes = 0; + svfs.FreeFileNodes = 0; + } + } + data_len = 56; SIVAL(pdata,0,svfs.OptimalTransferSize); SIVAL(pdata,4,svfs.BlockSize);