This has been brought up before, but is probably still a problem. The correct fix, I believe, would be to only check f_ffree and f_bfree if f_files and f_blocks (respectively) are not 0.
This patch might fix it.
diff -ru courier-0.44.2/courier/courierd.C courier-0.44.2-reiserfs/courier/courierd.C
--- courier-0.44.2/courier/courierd.C 2003-03-07 18:49:56.000000000 -0800
+++ courier-0.44.2-reiserfs/courier/courierd.C 2003-12-05 10:11:45.000000000 -0800
@@ -155,7 +155,8 @@
if (freespace(MSGQDIR "/.", &nblock, &ninodes, &blocksize))
return (islow);
- if (ninodes < (unsigned long)(100+msgq::queue.GetSize()*2))
+ if (ninodes != -1 &&
+ ninodes < (unsigned long)(100+msgq::queue.GetSize()*2))
islow=1;
else
{
diff -ru courier-0.44.2/courier/libs/comstatfs.c
courier-0.44.2-reiserfs/courier/libs/comstatfs.c
--- courier-0.44.2/courier/libs/comstatfs.c 2000-05-15 23:18:31.000000000 -0700
+++ courier-0.44.2-reiserfs/courier/libs/comstatfs.c 2003-12-05 10:10:21.000000000
-0800
@@ -56,6 +56,7 @@
#define BAVAIL buf.f_bavail
#define IAVAIL buf.f_favail
+#define ITOTAL buf.f_files
*blksize=buf.f_bsize;
@@ -67,6 +68,7 @@
#define BAVAIL buf.f_bfree
#define IAVAIL buf.f_ffree
+#define ITOTAL buf.f_files
*blksize=buf.f_bsize;
#endif
@@ -77,6 +79,7 @@
if (*nblocks != BAVAIL) *nblocks= ~0; /* Overflow */
if (*ninodes != IAVAIL) *ninodes= ~0; /* Overflow */
+ if (ITOTAL == 0) *ninodes = -1; /* This fs does not have a static
limit on inodes */
return (0);
}
diff -ru courier-0.44.2/courier/submit.C courier-0.44.2-reiserfs/courier/submit.C
--- courier-0.44.2/courier/submit.C 2003-10-04 21:47:50.000000000 -0700
+++ courier-0.44.2-reiserfs/courier/submit.C 2003-12-05 10:13:17.000000000 -0800
@@ -177,7 +177,8 @@
return (0);
}
- if (nfreeinodes < min_inodes) return (-1);
+ if (nfreeinodes != -1 &&
+ nfreeinodes < min_inodes) return (-1);
if (nfreeblocks < blksize * nsubmitters/65536 + 100)
*availbytes=4096;
