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.
}
#endif
- if (buf->in_file && buf->file->directio) {
- return 0;
- }
-
sendfile = ctx->sendfile;
#if (NGX_SENDFILE_LIMIT)
sendfile = 0;
}
+#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) {
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
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,