Squid-2.3.DEVEL2: UFS filesystem freespace stats In cachemgr Store Directory Stats, show space available to Squid rather than raw filesystem space (some space are available to root only) Also extend the support for showing this on Linux. Index: squid/configure.in diff -u squid/configure.in:1.1.1.35.2.2 squid/configure.in:1.1.1.35.2.3 --- squid/configure.in:1.1.1.35.2.2 Sat Aug 7 21:07:34 1999 +++ squid/configure.in Sat Aug 7 22:36:25 1999 @@ -631,6 +631,7 @@ sys/socket.h \ sys/stat.h \ sys/statvfs.h \ + sys/vfs.h \ sys/syscall.h \ sys/time.h \ sys/types.h \ @@ -965,6 +966,7 @@ socketpair \ srand48 \ srandom \ + statfs \ sysconf \ syslog \ timegm \ Index: squid/src/store_dir_ufs.c diff -u squid/src/store_dir_ufs.c:1.1.1.2 squid/src/store_dir_ufs.c:1.1.1.2.2.1 --- squid/src/store_dir_ufs.c:1.1.1.2 Sat Aug 7 17:13:32 1999 +++ squid/src/store_dir_ufs.c Sat Aug 7 22:36:32 1999 @@ -38,7 +38,11 @@ #if HAVE_SYS_STATVFS_H #include #endif +#elif HAVE_STATFS +#if HAVE_SYS_VFS_H +#include #endif +#endif #define DefaultLevelOneDirs 16 #define DefaultLevelTwoDirs 256 @@ -1133,6 +1137,8 @@ SwapDir *SD; #if HAVE_STATVFS struct statvfs sfs; +#elif HAVE_STATFS + struct statfs sfs; #endif for (i = 0; i < Config.cacheSwap.n_configured; i++) { SD = &Config.cacheSwap.swapDirs[i]; @@ -1147,18 +1153,33 @@ storeAppendPrintf(sentry, "Filemap bits in use: %d of %d (%d%%)\n", SD->map->n_files_in_map, SD->map->max_n_files, percent(SD->map->n_files_in_map, SD->map->max_n_files)); -#if HAVE_STATVFS +#if HAVE_STATVFS || HAVE_STATFS #define fsbtoblk(num, fsbs, bs) \ (((fsbs) != 0 && (fsbs) < (bs)) ? \ (num) / ((bs) / (fsbs)) : (num) * ((fsbs) / (bs))) - if (!statvfs(SD->path, &sfs)) { - storeAppendPrintf(sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n", - fsbtoblk((sfs.f_blocks - sfs.f_bfree), sfs.f_frsize, 1024), - fsbtoblk(sfs.f_blocks, sfs.f_frsize, 1024), - percent(sfs.f_blocks - sfs.f_bfree, sfs.f_blocks)); - storeAppendPrintf(sentry, "Filesystem Inodes in use: %d/%d (%d%%)\n", - sfs.f_files - sfs.f_ffree, sfs.f_files, - percent(sfs.f_files - sfs.f_ffree, sfs.f_files)); +#if HAVE_STATVFS + if (!statvfs(SD->path, &sfs)) +#elif HAVE_STATFS + if (!statfs(SD->path, &sfs)) +#endif + { +#if HAVE_STATVFS + /* Work around for Linux and others with no fragments.. */ + if (sfs.f_frsize == 0) + sfs.f_frsize = sfs.f_bsize; + storeAppendPrintf(sentry, "Filesystem Space in use: %ld/%ld KB (%d%%)\n", + (long int)fsbtoblk((sfs.f_blocks - sfs.f_bavail), sfs.f_frsize, 1024), + (long int)fsbtoblk(sfs.f_blocks - sfs.f_bfree + sfs.f_bavail, sfs.f_frsize, 1024), + (int)percent(sfs.f_blocks - sfs.f_bfree, sfs.f_blocks - sfs.f_bfree + sfs.f_bavail)); +#elif HAVE_STATFS + storeAppendPrintf(sentry, "Filesystem Space in use: %ld/%ld KB (%d%%)\n", + (long int)fsbtoblk((sfs.f_blocks - sfs.f_bfree), sfs.f_bsize, 1024), + (long int)fsbtoblk(sfs.f_blocks - sfs.f_bfree + sfs.f_bavail, sfs.f_bsize, 1024), + (int)percent(sfs.f_blocks - sfs.f_bfree, sfs.f_blocks - sfs.f_bfree + sfs.f_bavail)); +#endif + storeAppendPrintf(sentry, "Filesystem Inodes in use: %ld/%ld (%d%%)\n", + (long int)sfs.f_files - sfs.f_ffree, (long int)sfs.f_files, + (int)percent(sfs.f_files - sfs.f_ffree, sfs.f_files)); } #endif storeAppendPrintf(sentry, "Flags:");