diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2011-09-05 16:36:19 +0000 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2011-09-05 16:36:19 +0000 |
| commit | 4f65a05d1819392acdef365f387fa078baaabaab (patch) | |
| tree | a0e33e0aa7456138366e8eff2143a8dfabfe5e25 | |
| parent | 3a73e50498cc7bba3d2fd2ac31236b5a1b2c287e (diff) | |
| download | nginx-4f65a05d1819392acdef365f387fa078baaabaab.tar.gz nginx-4f65a05d1819392acdef365f387fa078baaabaab.tar.bz2 | |
Bugfix: open_file_cache lost is_directio flag.
On file retest open_file_cache lost is_directio if file wasn't changed.
This caused unaligned operations under Linux to fail with EINVAL.
It wasn't noticeable with AIO though, as errors wasn't properly logged.
| -rw-r--r-- | src/core/ngx_open_file_cache.c | 2 | ||||
| -rw-r--r-- | src/os/unix/ngx_file_aio_read.c | 3 | ||||
| -rw-r--r-- | src/os/unix/ngx_linux_aio_read.c | 4 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c index a70385c35..1cce9e92b 100644 --- a/src/core/ngx_open_file_cache.c +++ b/src/core/ngx_open_file_cache.c @@ -290,6 +290,8 @@ ngx_open_cached_file(ngx_open_file_cache_t *cache, ngx_str_t *name, file->use_event = 1; } + of->is_directio = file->is_directio; + goto renew; } diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c index ef7a46107..557f9de6a 100644 --- a/src/os/unix/ngx_file_aio_read.c +++ b/src/os/unix/ngx_file_aio_read.c @@ -86,6 +86,9 @@ ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset, return aio->nbytes; } + ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, + "aio read \"%s\" failed", file->name.data); + return NGX_ERROR; } diff --git a/src/os/unix/ngx_linux_aio_read.c b/src/os/unix/ngx_linux_aio_read.c index 72875ca01..b9d1d01cd 100644 --- a/src/os/unix/ngx_linux_aio_read.c +++ b/src/os/unix/ngx_linux_aio_read.c @@ -74,6 +74,10 @@ ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset, } ngx_set_errno(-aio->res); + + ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno, + "aio read \"%s\" failed", file->name.data); + return NGX_ERROR; } |
