As I see it your tasks for the Squid project would be
- Relay relevant bug reports between RedHat and Squid Bugzilla.
- Maintain the RH Squid packages. While doing this please note our
informal patch policy printed at the top of the patches page. This
policy basically boils down to that you should be very restrictive about
using patches to the current stable Squid version even if published.
When in doubt ask.
Ok, I'll respect it.
- When you can, fix bugs reported by your users and send us the
resulting patch in your bug report.
There is a patch for squid-2.5 STABLE 10, it'll (I hope) solve the issue
with large file systems and at the same time doesn't add _LARGE_FILE_
flags to all files. We test it in devel/rawhide branch and feel free to
use it as you want.
Ma.
--- squid-2.5.STABLE10/src/Makefile.am.statvfs 2005-04-23 03:32:27.000000000 +0200
+++ squid-2.5.STABLE10/src/Makefile.am 2005-07-06 16:15:04.000000000 +0200
@@ -190,6 +190,7 @@
store_client.c \
store_digest.c \
store_dir.c \
+ store_dir_stat.c \
store_key_md5.c \
store_log.c \
store_rebuild.c \
--- squid-2.5.STABLE10/src/tools.c.statvfs 2005-04-22 22:45:12.000000000 +0200
+++ squid-2.5.STABLE10/src/tools.c 2005-07-06 16:15:04.000000000 +0200
@@ -738,6 +738,12 @@
return b ? (100.0 * a / b) : 0.0;
}
+unsigned long long
+llpercent(unsigned long long a, unsigned long long b)
+{
+ return b ? ((unsigned long long) (100.0 * a / b + 0.5)) : 0;
+}
+
void
squid_signal(int sig, SIGHDLR * func, int flags)
{
--- squid-2.5.STABLE10/src/store_dir.c.statvfs 2005-03-26 03:50:54.000000000 +0100
+++ squid-2.5.STABLE10/src/store_dir.c 2005-07-06 16:15:04.000000000 +0200
@@ -486,60 +486,3 @@
ndir++;
}
-int
-storeDirGetBlkSize(const char *path, int *blksize)
-{
-#if HAVE_STATVFS
- struct statvfs sfs;
- if (statvfs(path, &sfs)) {
- debug(50, 1) ("%s: %s\n", path, xstrerror());
- *blksize = 2048;
- return 1;
- }
- *blksize = (int) sfs.f_frsize;
-#else
- struct statfs sfs;
- if (statfs(path, &sfs)) {
- debug(50, 1) ("%s: %s\n", path, xstrerror());
- *blksize = 2048;
- return 1;
- }
- *blksize = (int) sfs.f_bsize;
-#endif
- /*
- * Sanity check; make sure we have a meaningful value.
- */
- if (*blksize < 512)
- *blksize = 2048;
- return 0;
-}
-
-#define fsbtoblk(num, fsbs, bs) \
- (((fsbs) != 0 && (fsbs) < (bs)) ? \
- (num) / ((bs) / (fsbs)) : (num) * ((fsbs) / (bs)))
-int
-storeDirGetUFSStats(const char *path, int *totl_kb, int *free_kb, int *totl_in, int *free_in)
-{
-#if HAVE_STATVFS
- struct statvfs sfs;
- if (statvfs(path, &sfs)) {
- debug(50, 1) ("%s: %s\n", path, xstrerror());
- return 1;
- }
- *totl_kb = (int) fsbtoblk(sfs.f_blocks, sfs.f_frsize, 1024);
- *free_kb = (int) fsbtoblk(sfs.f_bfree, sfs.f_frsize, 1024);
- *totl_in = (int) sfs.f_files;
- *free_in = (int) sfs.f_ffree;
-#else
- struct statfs sfs;
- if (statfs(path, &sfs)) {
- debug(50, 1) ("%s: %s\n", path, xstrerror());
- return 1;
- }
- *totl_kb = (int) fsbtoblk(sfs.f_blocks, sfs.f_bsize, 1024);
- *free_kb = (int) fsbtoblk(sfs.f_bfree, sfs.f_bsize, 1024);
- *totl_in = (int) sfs.f_files;
- *free_in = (int) sfs.f_ffree;
-#endif
- return 0;
-}
--- squid-2.5.STABLE10/src/Makefile.in.statvfs 2005-07-06 16:15:04.000000000 +0200
+++ squid-2.5.STABLE10/src/Makefile.in 2005-07-06 16:15:04.000000000 +0200
@@ -286,6 +286,7 @@
store_client.c \
store_digest.c \
store_dir.c \
+ store_dir_stat.c \
store_key_md5.c \
store_log.c \
store_rebuild.c \
@@ -505,7 +506,7 @@
ssl.$(OBJEXT) $(am__objects_8) stat.$(OBJEXT) \
StatHist.$(OBJEXT) String.$(OBJEXT) stmem.$(OBJEXT) \
store.$(OBJEXT) store_io.$(OBJEXT) store_client.$(OBJEXT) \
- store_digest.$(OBJEXT) store_dir.$(OBJEXT) \
+ store_digest.$(OBJEXT) store_dir.$(OBJEXT) store_dir_stat.$(OBJEXT) \
store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \
store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \
store_swapmeta.$(OBJEXT) store_swapout.$(OBJEXT) \
@@ -576,7 +577,7 @@
@AMDEP_TRUE@ $(DEPDIR)/ssl_support.Po $(DEPDIR)/stat.Po \
@AMDEP_TRUE@ $(DEPDIR)/stmem.Po $(DEPDIR)/store.Po \
@AMDEP_TRUE@ $(DEPDIR)/store_client.Po $(DEPDIR)/store_digest.Po \
[EMAIL PROTECTED]@ $(DEPDIR)/store_dir.Po $(DEPDIR)/store_io.Po \
[EMAIL PROTECTED]@ $(DEPDIR)/store_dir.Po $(DEPDIR)/store_dir_stat.Po $(DEPDIR)/store_io.Po \
@AMDEP_TRUE@ $(DEPDIR)/store_key_md5.Po $(DEPDIR)/store_log.Po \
@AMDEP_TRUE@ $(DEPDIR)/store_modules.Po \
@AMDEP_TRUE@ $(DEPDIR)/store_rebuild.Po \
@@ -807,6 +808,7 @@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
[EMAIL PROTECTED]@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
@AMDEP_TRUE@@am__include@ @[EMAIL PROTECTED](DEPDIR)/[EMAIL PROTECTED]@
--- /dev/null 2005-07-06 10:26:47.607584424 +0200
+++ squid-2.5.STABLE10/src/store_dir_stat.h 2005-07-06 16:15:04.000000000 +0200
@@ -0,0 +1,57 @@
+
+/*
+ * $Id: store_dir_stat.h,v 1.420.2.34 2005/04/19 22:19:27 hno Exp $
+ *
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_STORE_DIR_STAT_H
+#define SQUID_STORE_DIR_STAT_H
+
+#include "squid.h"
+
+#ifdef HAVE_STATVFS
+#define _FILE_OFFSET_BITS 64
+#define _LARGEFILE64_SOURCE 1
+#include <sys/statvfs.h>
+#endif
+/* Windows uses sys/vfs.h */
+#if HAVE_SYS_VFS_H
+#include <sys/vfs.h>
+#endif
+
+int storeDirGetBlkSize(const char *path, int *blksize);
+
+#ifdef HAVE_STATVFS
+extern int storeDirGetUFSStats(const char *, fsblkcnt_t *, fsblkcnt_t *, fsfilcnt_t *, fsfilcnt_t *);
+#else
+extern int storeDirGetUFSStats(const char *path, int *totl_kb, int *free_kb, int *totl_in, int *free_in);
+#endif
+
+#endif /* SQUID_STORE_DIR_STAT_H */
--- /dev/null 2005-07-06 10:26:47.607584424 +0200
+++ squid-2.5.STABLE10/src/store_dir_stat.c 2005-07-06 16:15:04.000000000 +0200
@@ -0,0 +1,101 @@
+
+/*
+ * $Id: store_dir_stat.c,v 1.135.2.3 2005/03/26 02:50:54 hno Exp $
+ *
+ * DEBUG: section 47 Store Directory Routines
+ * AUTHOR: Duane Wessels
+ *
+ * SQUID Web Proxy Cache http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ * Squid is the result of efforts by numerous individuals from
+ * the Internet community; see the CONTRIBUTORS file for full
+ * details. Many organizations have provided support for Squid's
+ * development; see the SPONSORS file for full details. Squid is
+ * Copyrighted (C) 2001 by the Regents of the University of
+ * California; see the COPYRIGHT file for full details. Squid
+ * incorporates software developed and/or copyrighted by other
+ * sources; see the CREDITS file for full details.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#include "squid.h"
+#include "store_dir_stat.h"
+
+int
+storeDirGetBlkSize(const char *path, int *blksize)
+{
+#if HAVE_STATVFS
+ struct statvfs sfs;
+ if (statvfs(path, &sfs)) {
+ debug(50, 1) ("%s: %s\n", path, xstrerror());
+ *blksize = 2048;
+ return 1;
+ }
+ *blksize = (int) sfs.f_frsize;
+#else
+ struct statfs sfs;
+ if (statfs(path, &sfs)) {
+ debug(50, 1) ("%s: %s\n", path, xstrerror());
+ *blksize = 2048;
+ return 1;
+ }
+ *blksize = (int) sfs.f_bsize;
+#endif
+ /*
+ * Sanity check; make sure we have a meaningful value.
+ */
+ if (*blksize < 512)
+ *blksize = 2048;
+ return 0;
+}
+
+#define fsbtoblk(num, fsbs, bs) \
+ (((fsbs) != 0 && (fsbs) < (bs)) ? \
+ (num) / ((bs) / (fsbs)) : (num) * ((fsbs) / (bs)))
+
+#if HAVE_STATVFS
+int
+storeDirGetUFSStats(const char *path, fsblkcnt_t *totl_kb, fsblkcnt_t *free_kb, fsfilcnt_t *totl_in, fsfilcnt_t *free_in)
+#else
+int
+storeDirGetUFSStats(const char *path, int *totl_kb, int *free_kb, int *totl_in, int *free_in)
+#endif
+{
+#if HAVE_STATVFS
+ struct statvfs sfs;
+ if (statvfs(path, &sfs)) {
+ debug(50, 1) ("%s: %s\n", path, xstrerror());
+ return 1;
+ }
+ *totl_kb = fsbtoblk(sfs.f_blocks, sfs.f_frsize, 1024);
+ *free_kb = fsbtoblk(sfs.f_bfree, sfs.f_frsize, 1024);
+ *totl_in = sfs.f_files;
+ *free_in = sfs.f_ffree;
+#else
+ struct statfs sfs;
+ if (statfs(path, &sfs)) {
+ debug(50, 1) ("%s: %s\n", path, xstrerror());
+ return 1;
+ }
+ *totl_kb = fsbtoblk(sfs.f_blocks, sfs.f_bsize, 1024);
+ *free_kb = fsbtoblk(sfs.f_bfree, sfs.f_bsize, 1024);
+ *totl_in = sfs.f_files;
+ *free_in = sfs.f_ffree;
+#endif
+ return 0;
+}
--- squid-2.5.STABLE10/src/fs/diskd/store_dir_diskd.c.statvfs 2005-05-01 12:48:07.000000000 +0200
+++ squid-2.5.STABLE10/src/fs/diskd/store_dir_diskd.c 2005-07-06 16:21:13.000000000 +0200
@@ -40,6 +40,7 @@
#include <sys/shm.h>
#include "store_diskd.h"
+#include "store_dir_stat.h"
#define DefaultLevelOneDirs 16
#define DefaultLevelTwoDirs 256
@@ -1959,10 +1960,17 @@
storeDiskdDirStats(SwapDir * SD, StoreEntry * sentry)
{
diskdinfo_t *diskdinfo = SD->fsdata;
+#ifdef HAVE_STATVFS
+ fsblkcnt_t totl_kb = 0;
+ fsblkcnt_t free_kb = 0;
+ fsfilcnt_t totl_in = 0;
+ fsfilcnt_t free_in = 0;
+#else
int totl_kb = 0;
int free_kb = 0;
int totl_in = 0;
int free_in = 0;
+#endif
int x;
storeAppendPrintf(sentry, "First level subdirectories: %d\n", diskdinfo->l1);
storeAppendPrintf(sentry, "Second level subdirectories: %d\n", diskdinfo->l2);
@@ -1975,6 +1983,16 @@
percent(diskdinfo->map->n_files_in_map, diskdinfo->map->max_n_files));
x = storeDirGetUFSStats(SD->path, &totl_kb, &free_kb, &totl_in, &free_in);
if (0 == x) {
+#ifdef HAVE_STATVFS
+ storeAppendPrintf(sentry, "Filesystem Space in use: %llu/%llu KB (%llu%%)\n",
+ (unsigned long long)(totl_kb - free_kb),
+ (unsigned long long)totl_kb,
+ llpercent(totl_kb - free_kb, totl_kb));
+ storeAppendPrintf(sentry, "Filesystem Inodes in use: %llu/%llu (%llu%%)\n",
+ (unsigned long long)(totl_in - free_in),
+ (unsigned long long)totl_in,
+ llpercent(totl_in - free_in, totl_in));
+#else
storeAppendPrintf(sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",
totl_kb - free_kb,
totl_kb,
@@ -1983,6 +2001,7 @@
totl_in - free_in,
totl_in,
percent(totl_in - free_in, totl_in));
+#endif
}
storeAppendPrintf(sentry, "Flags:");
if (SD->flags.selected)
--- squid-2.5.STABLE10/src/fs/ufs/store_dir_ufs.c.statvfs 2005-03-27 00:27:11.000000000 +0100
+++ squid-2.5.STABLE10/src/fs/ufs/store_dir_ufs.c 2005-07-06 16:15:04.000000000 +0200
@@ -36,6 +36,7 @@
#include "squid.h"
#include "store_ufs.h"
+#include "store_dir_stat.h"
#define DefaultLevelOneDirs 16
#define DefaultLevelTwoDirs 256
@@ -1701,10 +1702,17 @@
storeUfsDirStats(SwapDir * SD, StoreEntry * sentry)
{
ufsinfo_t *ufsinfo = SD->fsdata;
+#ifdef HAVE_STATVFS
+ fsblkcnt_t totl_kb = 0;
+ fsblkcnt_t free_kb = 0;
+ fsfilcnt_t totl_in = 0;
+ fsfilcnt_t free_in = 0;
+#else
int totl_kb = 0;
int free_kb = 0;
int totl_in = 0;
int free_in = 0;
+#endif
int x;
storeAppendPrintf(sentry, "First level subdirectories: %d\n", ufsinfo->l1);
storeAppendPrintf(sentry, "Second level subdirectories: %d\n", ufsinfo->l2);
@@ -1717,6 +1725,16 @@
percent(ufsinfo->map->n_files_in_map, ufsinfo->map->max_n_files));
x = storeDirGetUFSStats(SD->path, &totl_kb, &free_kb, &totl_in, &free_in);
if (0 == x) {
+#ifdef HAVE_STATVFS
+ storeAppendPrintf(sentry, "Filesystem Space in use: %llu/%llu KB (%llu%%)\n",
+ (unsigned long long)(totl_kb - free_kb),
+ (unsigned long long)totl_kb,
+ llpercent(totl_kb - free_kb, totl_kb));
+ storeAppendPrintf(sentry, "Filesystem Inodes in use: %llu/%llu (%llu%%)\n",
+ (unsigned long long)(totl_in - free_in),
+ (unsigned long long)totl_in,
+ llpercent(totl_in - free_in, totl_in));
+#else
storeAppendPrintf(sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",
totl_kb - free_kb,
totl_kb,
@@ -1725,6 +1743,7 @@
totl_in - free_in,
totl_in,
percent(totl_in - free_in, totl_in));
+#endif
}
storeAppendPrintf(sentry, "Flags:");
if (SD->flags.selected)
--- squid-2.5.STABLE10/src/fs/aufs/store_dir_aufs.c.statvfs 2005-03-27 00:27:10.000000000 +0100
+++ squid-2.5.STABLE10/src/fs/aufs/store_dir_aufs.c 2005-07-06 16:15:04.000000000 +0200
@@ -36,6 +36,7 @@
#include "squid.h"
#include "store_asyncufs.h"
+#include "store_dir_stat.h"
#define DefaultLevelOneDirs 16
#define DefaultLevelTwoDirs 256
@@ -1692,10 +1693,17 @@
storeAufsDirStats(SwapDir * SD, StoreEntry * sentry)
{
squidaioinfo_t *aioinfo = SD->fsdata;
+#ifdef HAVE_STATVFS
+ fsblkcnt_t totl_kb;
+ fsblkcnt_t free_kb;
+ fsfilcnt_t totl_in;
+ fsfilcnt_t free_in;
+#else
int totl_kb = 0;
int free_kb = 0;
int totl_in = 0;
int free_in = 0;
+#endif
int x;
storeAppendPrintf(sentry, "First level subdirectories: %d\n", aioinfo->l1);
storeAppendPrintf(sentry, "Second level subdirectories: %d\n", aioinfo->l2);
@@ -1708,6 +1716,16 @@
percent(aioinfo->map->n_files_in_map, aioinfo->map->max_n_files));
x = storeDirGetUFSStats(SD->path, &totl_kb, &free_kb, &totl_in, &free_in);
if (0 == x) {
+#ifdef HAVE_STATVFS
+ storeAppendPrintf(sentry, "Filesystem Space in use: %llu/%llu KB (%llu%%)\n",
+ (unsigned long long)(totl_kb - free_kb),
+ (unsigned long long)totl_kb,
+ llpercent(totl_kb - free_kb, totl_kb));
+ storeAppendPrintf(sentry, "Filesystem Inodes in use: %llu/%llu (%llu%%)\n",
+ (unsigned long long)(totl_in - free_in),
+ (unsigned long long)totl_in,
+ llpercent(totl_in - free_in, totl_in));
+#else
storeAppendPrintf(sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",
totl_kb - free_kb,
totl_kb,
@@ -1716,6 +1734,7 @@
totl_in - free_in,
totl_in,
percent(totl_in - free_in, totl_in));
+#endif
}
storeAppendPrintf(sentry, "Flags:");
if (SD->flags.selected)
--- squid-2.5.STABLE10/src/protos.h.statvfs 2005-04-20 00:19:27.000000000 +0200
+++ squid-2.5.STABLE10/src/protos.h 2005-07-06 16:15:04.000000000 +0200
@@ -1005,8 +1005,6 @@
extern void storeDirCallback(void);
extern void storeDirLRUDelete(StoreEntry *);
extern void storeDirLRUAdd(StoreEntry *);
-extern int storeDirGetBlkSize(const char *path, int *blksize);
-extern int storeDirGetUFSStats(const char *, int *, int *, int *, int *);
/*
* store_swapmeta.c
@@ -1074,6 +1072,7 @@
extern time_t getCurrentTime(void);
extern int percent(int, int);
extern double dpercent(double, double);
+extern unsigned long long llpercent(unsigned long long, unsigned long long);
extern void squid_signal(int sig, SIGHDLR *, int flags);
extern pid_t readPidFile(void);
extern struct in_addr inaddrFromHostent(const struct hostent *hp);