Welcome! Log In Create A New Profile

Advanced

[nginx] Allowed up to two EBUSY errors from sendfile().

Maxim Dounin
January 03, 2014 06:50PM
details: http://hg.nginx.org/nginx/rev/d39a69427056
branches:
changeset: 5498:d39a69427056
user: Maxim Dounin <mdounin@mdounin.ru>
date: Sat Jan 04 03:31:58 2014 +0400
description:
Allowed up to two EBUSY errors from sendfile().

Fallback to synchronous sendfile() now only done on 3rd EBUSY without
any progress in a row. Not falling back is believed to be better
in case of occasional EBUSY, though protection is still needed to
make sure there will be no infinite loop.

diffstat:

src/core/ngx_connection.h | 1 +
src/http/ngx_http_copy_filter_module.c | 6 ++++--
2 files changed, 5 insertions(+), 2 deletions(-)

diffs (32 lines):

diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -177,6 +177,7 @@ struct ngx_connection_s {

#if (NGX_HAVE_AIO_SENDFILE)
unsigned aio_sendfile:1;
+ unsigned busy_count:2;
ngx_buf_t *busy_sendfile;
#endif

diff --git a/src/http/ngx_http_copy_filter_module.c b/src/http/ngx_http_copy_filter_module.c
--- a/src/http/ngx_http_copy_filter_module.c
+++ b/src/http/ngx_http_copy_filter_module.c
@@ -169,13 +169,15 @@ ngx_http_copy_filter(ngx_http_request_t
offset = c->busy_sendfile->file_pos;

if (file->aio) {
- c->aio_sendfile = (offset != file->aio->last_offset);
+ c->busy_count = (offset == file->aio->last_offset) ?
+ c->busy_count + 1 : 0;
file->aio->last_offset = offset;

- if (c->aio_sendfile == 0) {
+ if (c->busy_count > 2) {
ngx_log_error(NGX_LOG_ALERT, c->log, 0,
"sendfile(%V) returned busy again",
&file->name);
+ c->aio_sendfile = 0;
}
}


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Allowed up to two EBUSY errors from sendfile().

Maxim Dounin 512 January 03, 2014 06:50PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 171
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready