diff src/os/unix/ngx_linux_sendfile_chain.c @ 232:d8f5c91a5c07 NGINX_0_4_1

nginx 0.4.1 *) Bugfix: the DragonFlyBSD compatibility. Thanks to Pavel Nazarov. *) Workaround: of bug in 64-bit Linux sendfile(), when file is more than 2G. *) Feature: now on Linux nginx uses O_NOATIME flag for static requests. Thanks to Yusuf Goolamabbas.
author Igor Sysoev <http://sysoev.ru>
date Thu, 14 Sep 2006 00:00:00 +0400
parents 36af50a5582d
children 30862655219e
line wrap: on
line diff
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -16,9 +16,15 @@
  * parameter is int32_t, and use sendfile() for the file parts below 2G only,
  * see src/os/unix/ngx_linux_config.h
  *
- * Linux 2.4.21 has a new sendfile64() syscall #239.
+ * Linux 2.4.21 has the new sendfile64() syscall #239.
+ *
+ * On Linux up to 2.6.16 sendfile() does not allow to pass the count parameter
+ * more than 2G-1 bytes even on 64-bit platforms: it returns EINVAL,
+ * so we limit it to 2G-1 bytes.
  */
 
+#define NGX_SENDFILE_LIMIT  2147483647L
+
 
 #if (IOV_MAX > 64)
 #define NGX_HEADERS  64
@@ -54,10 +60,10 @@ ngx_linux_sendfile_chain(ngx_connection_
     }
 
 
-    /* the maximum limit size is the maximum size_t value - the page size */
+    /* the maximum limit size is 2G-1 - the page size */
 
-    if (limit == 0 || limit > NGX_MAX_SIZE_T_VALUE - ngx_pagesize) {
-        limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
+    if (limit == 0 || limit > NGX_SENDFILE_LIMIT - ngx_pagesize) {
+        limit = NGX_SENDFILE_LIMIT - ngx_pagesize;
     }