mirror of
https://github.com/nginx/nginx.git
synced 2025-01-03 12:47:21 -06:00
allow directio on XFS
This commit is contained in:
parent
1bf7dc1884
commit
7f3c048e21
@ -13,6 +13,17 @@
|
||||
#define NGX_SENDFILE_LIMIT 4096
|
||||
#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
|
||||
|
||||
@ -327,7 +338,7 @@ ngx_output_chain_align_file_buf(ngx_output_chain_ctx_t *ctx, off_t bsize)
|
||||
|
||||
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) {
|
||||
|
||||
@ -338,7 +349,7 @@ ngx_output_chain_align_file_buf(ngx_output_chain_ctx_t *ctx, off_t bsize)
|
||||
size = (size_t) bsize;
|
||||
|
||||
} else {
|
||||
size = 512 - size;
|
||||
size = NGX_DIRECTIO_BLOCK - size;
|
||||
|
||||
if ((off_t) size > 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
|
||||
*/
|
||||
|
||||
b->start = ngx_pmemalign(ctx->pool, size, 512);
|
||||
b->start = ngx_pmemalign(ctx->pool, size, NGX_DIRECTIO_BLOCK);
|
||||
if (b->start == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user