mirror of
https://github.com/nginx/nginx.git
synced 2025-01-07 06:33:00 -06:00
allow directio on XFS
This commit is contained in:
parent
1bf7dc1884
commit
7f3c048e21
@ -13,6 +13,17 @@
|
|||||||
#define NGX_SENDFILE_LIMIT 4096
|
#define NGX_SENDFILE_LIMIT 4096
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When DIRECTIO is enabled FreeBSD, Solaris, and MacOSX read directly
|
||||||
|
* to an application memory from a device if parameters are aligned
|
||||||
|
* to device sector boundary(512 bytes). They fallback to usual read
|
||||||
|
* operation if the parameters are not aligned.
|
||||||
|
* Linux allows DIRECTIO only if the parameters are aligned to a filesystem
|
||||||
|
* sector boundary, otherwise it returns EINVAL. The sector size is
|
||||||
|
* usually 512 bytes, however, on XFS it may be 4096 bytes.
|
||||||
|
*/
|
||||||
|
#define NGX_DIRECTIO_BLOCK 4096
|
||||||
|
|
||||||
|
|
||||||
#define NGX_NONE 1
|
#define NGX_NONE 1
|
||||||
|
|
||||||
@ -327,7 +338,7 @@ ngx_output_chain_align_file_buf(ngx_output_chain_ctx_t *ctx, off_t bsize)
|
|||||||
|
|
||||||
ctx->directio = 1;
|
ctx->directio = 1;
|
||||||
|
|
||||||
size = (size_t) (in->file_pos - (in->file_pos & ~511));
|
size = (size_t) (in->file_pos - (in->file_pos & ~(NGX_DIRECTIO_BLOCK - 1)));
|
||||||
|
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
|
|
||||||
@ -338,7 +349,7 @@ ngx_output_chain_align_file_buf(ngx_output_chain_ctx_t *ctx, off_t bsize)
|
|||||||
size = (size_t) bsize;
|
size = (size_t) bsize;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
size = 512 - size;
|
size = NGX_DIRECTIO_BLOCK - size;
|
||||||
|
|
||||||
if ((off_t) size > bsize) {
|
if ((off_t) size > bsize) {
|
||||||
size = (size_t) bsize;
|
size = (size_t) bsize;
|
||||||
@ -413,7 +424,7 @@ ngx_output_chain_get_buf(ngx_output_chain_ctx_t *ctx, off_t bsize)
|
|||||||
* userland buffer direct usage conjunctly with directio
|
* userland buffer direct usage conjunctly with directio
|
||||||
*/
|
*/
|
||||||
|
|
||||||
b->start = ngx_pmemalign(ctx->pool, size, 512);
|
b->start = ngx_pmemalign(ctx->pool, size, NGX_DIRECTIO_BLOCK);
|
||||||
if (b->start == NULL) {
|
if (b->start == NULL) {
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user