]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
* src/system.h (ST_BLKSIZE): Ceiling at SIZE_MAX / 8 + 1, not at 4
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 Oct 2006 22:25:51 +0000 (22:25 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 3 Oct 2006 22:25:51 +0000 (22:25 +0000)
MiB, since XFS hosts can legitimately have large values of
st_blksize.  Problem reported by Tony Ernst in
<http://savannah.gnu.org/bugs/?17903>.

ChangeLog
src/system.h

index aa8190f48d4bc483ebe10cb3077e883fa4880c88..5458cc6de1252fba8e2f59c7447144270e728d48 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       * src/system.h (ST_BLKSIZE): Ceiling at SIZE_MAX / 8 + 1, not at 4
+       MiB, since XFS hosts can legitimately have large values of
+       st_blksize.  Problem reported by Tony Ernst in
+       <http://savannah.gnu.org/bugs/?17903>.
+
 2006-10-04  Jim Meyering  <jim@meyering.net>
 
        * src/remove.c (nonexistent_file_errno): Remove ENAMETOOLONG.
index 56636c73586a99040b65906fb30493895bc8709a..29d170fd33420238fa24c1e88530840ddc048456 100644 (file)
@@ -206,11 +206,14 @@ enum
 /* Some systems, like Sequents, return st_blksize of 0 on pipes.
    Also, when running `rsh hpux11-system cat any-file', cat would
    determine that the output stream had an st_blksize of 2147421096.
-   So here we arbitrarily limit the `optimal' block size to 4MB.
-   If anyone knows of a system for which the legitimate value for
-   st_blksize can exceed 4MB, please report it as a bug in this code.  */
+   Conversely st_blksize can be 2 GiB (or maybe even larger) with XFS
+   on 64-bit hosts.  Somewhat arbitrarily, limit the `optimal' block
+   size to SIZE_MAX / 8 + 1.  (Dividing SIZE_MAX by only 4 wouldn't
+   suffice, since "cat" sometimes multiplies the result by 4.)  If
+   anyone knows of a system for which this limit is too small, please
+   report it as a bug in this code.  */
 # define ST_BLKSIZE(statbuf) ((0 < (statbuf).st_blksize \
-                              && (statbuf).st_blksize <= (1 << 22)) /* 4MB */ \
+                              && (statbuf).st_blksize <= SIZE_MAX / 8 + 1) \
                              ? (statbuf).st_blksize : DEV_BSIZE)
 # if defined hpux || defined __hpux__ || defined __hpux
 /* HP-UX counts st_blocks in 1024-byte units.