Mercurial > hg > nginx
changeset 7987:b002ad258f1d
Support for sendfile(SF_NOCACHE).
The SF_NOCACHE flag, introduced in FreeBSD 11 along with the new non-blocking
sendfile() implementation by glebius@, makes it possible to use sendfile()
along with the "directio" directive.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 27 Dec 2021 19:49:26 +0300 |
parents | f1fcb0fe6975 |
children | 8af85c66da94 |
files | src/core/ngx_output_chain.c src/event/ngx_event_openssl.c src/os/unix/ngx_freebsd_sendfile_chain.c |
diffstat | 3 files changed, 25 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/core/ngx_output_chain.c Mon Dec 27 19:48:42 2021 +0300 +++ b/src/core/ngx_output_chain.c Mon Dec 27 19:49:26 2021 +0300 @@ -256,10 +256,6 @@ } #endif - if (buf->in_file && buf->file->directio) { - return 0; - } - sendfile = ctx->sendfile; #if (NGX_SENDFILE_LIMIT) @@ -270,6 +266,19 @@ #endif +#if !(NGX_HAVE_SENDFILE_NODISKIO) + + /* + * With DIRECTIO, disable sendfile() unless sendfile(SF_NOCACHE) + * is available. + */ + + if (buf->in_file && buf->file->directio) { + sendfile = 0; + } + +#endif + if (!sendfile) { if (!ngx_buf_in_memory(buf)) {
--- a/src/event/ngx_event_openssl.c Mon Dec 27 19:48:42 2021 +0300 +++ b/src/event/ngx_event_openssl.c Mon Dec 27 19:49:26 2021 +0300 @@ -2955,7 +2955,13 @@ ngx_set_errno(0); #if (NGX_HAVE_SENDFILE_NODISKIO) + flags = (c->busy_count <= 2) ? SF_NODISKIO : 0; + + if (file->file->directio) { + flags |= SF_NOCACHE; + } + #else flags = 0; #endif
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c Mon Dec 27 19:48:42 2021 +0300 +++ b/src/os/unix/ngx_freebsd_sendfile_chain.c Mon Dec 27 19:49:26 2021 +0300 @@ -174,7 +174,13 @@ sent = 0; #if (NGX_HAVE_SENDFILE_NODISKIO) + flags = (c->busy_count <= 2) ? SF_NODISKIO : 0; + + if (file->file->directio) { + flags |= SF_NOCACHE; + } + #endif rc = sendfile(file->file->fd, c->fd, file->file_pos,