Mercurial > hg > nginx-vendor-1-0
comparison src/core/ngx_output_chain.c @ 420:ad0a34a8efa6 NGINX_0_7_22
nginx 0.7.22
*) Feature: the "none" parameter in the "smtp_auth" directive.
Thanks to Maxim Dounin.
*) Feature: the "$cookie_..." variables.
*) Bugfix: the "directio" directive did not work in XFS filesystem.
*) Bugfix: the resolver did not understand big DNS responses.
Thanks to Zyb.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Thu, 20 Nov 2008 00:00:00 +0300 |
parents | a8e3f1441eec |
children | f39b9e29530d |
comparison
equal
deleted
inserted
replaced
419:b986babf3f57 | 420:ad0a34a8efa6 |
---|---|
10 | 10 |
11 | 11 |
12 #if 0 | 12 #if 0 |
13 #define NGX_SENDFILE_LIMIT 4096 | 13 #define NGX_SENDFILE_LIMIT 4096 |
14 #endif | 14 #endif |
15 | |
16 /* | |
17 * When DIRECTIO is enabled FreeBSD, Solaris, and MacOSX read directly | |
18 * to an application memory from a device if parameters are aligned | |
19 * to device sector boundary(512 bytes). They fallback to usual read | |
20 * operation if the parameters are not aligned. | |
21 * Linux allows DIRECTIO only if the parameters are aligned to a filesystem | |
22 * sector boundary, otherwise it returns EINVAL. The sector size is | |
23 * usually 512 bytes, however, on XFS it may be 4096 bytes. | |
24 */ | |
25 #define NGX_DIRECTIO_BLOCK 4096 | |
15 | 26 |
16 | 27 |
17 #define NGX_NONE 1 | 28 #define NGX_NONE 1 |
18 | 29 |
19 | 30 |
325 return NGX_DECLINED; | 336 return NGX_DECLINED; |
326 } | 337 } |
327 | 338 |
328 ctx->directio = 1; | 339 ctx->directio = 1; |
329 | 340 |
330 size = (size_t) (in->file_pos - (in->file_pos & ~511)); | 341 size = (size_t) (in->file_pos - (in->file_pos & ~(NGX_DIRECTIO_BLOCK - 1))); |
331 | 342 |
332 if (size == 0) { | 343 if (size == 0) { |
333 | 344 |
334 if (bsize >= (off_t) ctx->bufs.size) { | 345 if (bsize >= (off_t) ctx->bufs.size) { |
335 return NGX_DECLINED; | 346 return NGX_DECLINED; |
336 } | 347 } |
337 | 348 |
338 size = (size_t) bsize; | 349 size = (size_t) bsize; |
339 | 350 |
340 } else { | 351 } else { |
341 size = 512 - size; | 352 size = NGX_DIRECTIO_BLOCK - size; |
342 | 353 |
343 if ((off_t) size > bsize) { | 354 if ((off_t) size > bsize) { |
344 size = (size_t) bsize; | 355 size = (size_t) bsize; |
345 } | 356 } |
346 } | 357 } |
411 /* | 422 /* |
412 * allocate block aligned to a disk sector size to enable | 423 * allocate block aligned to a disk sector size to enable |
413 * userland buffer direct usage conjunctly with directio | 424 * userland buffer direct usage conjunctly with directio |
414 */ | 425 */ |
415 | 426 |
416 b->start = ngx_pmemalign(ctx->pool, size, 512); | 427 b->start = ngx_pmemalign(ctx->pool, size, NGX_DIRECTIO_BLOCK); |
417 if (b->start == NULL) { | 428 if (b->start == NULL) { |
418 return NGX_ERROR; | 429 return NGX_ERROR; |
419 } | 430 } |
420 | 431 |
421 } else { | 432 } else { |