diff options
author | Igor Sysoev <igor@sysoev.ru> | 2008-09-12 13:50:12 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2008-09-12 13:50:12 +0000 |
commit | fae2c00d02d3631347a17deab2709968be1a05c7 (patch) | |
tree | a62d5986fc44f517e87de51567145b12bbaab078 /src/os/unix | |
parent | 0f8ea4de461b5fc54b69e09364c94b066363c0c9 (diff) | |
download | nginx-fae2c00d02d3631347a17deab2709968be1a05c7.tar.gz nginx-fae2c00d02d3631347a17deab2709968be1a05c7.zip |
disable directio for unaligned reads in Linux
Diffstat (limited to 'src/os/unix')
-rw-r--r-- | src/os/unix/ngx_files.c | 17 | ||||
-rw-r--r-- | src/os/unix/ngx_files.h | 19 |
2 files changed, 27 insertions, 9 deletions
diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c index ab861467e..661ecaa4e 100644 --- a/src/os/unix/ngx_files.c +++ b/src/os/unix/ngx_files.c @@ -389,7 +389,7 @@ ngx_unlock_fd(ngx_fd_t fd) #if (NGX_HAVE_O_DIRECT) ngx_int_t -ngx_directio(ngx_fd_t fd) +ngx_directio_on(ngx_fd_t fd) { int flags; @@ -402,4 +402,19 @@ ngx_directio(ngx_fd_t fd) return fcntl(fd, F_SETFL, flags | O_DIRECT); } + +ngx_int_t +ngx_directio_off(ngx_fd_t fd) +{ + int flags; + + flags = fcntl(fd, F_GETFL); + + if (flags == -1) { + return -1; + } + + return fcntl(fd, F_SETFL, flags & ~O_DIRECT); +} + #endif diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h index 9988bcc30..d7a38d95a 100644 --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -222,23 +222,26 @@ ngx_err_t ngx_unlock_fd(ngx_fd_t fd); #if (NGX_HAVE_O_DIRECT) -ngx_int_t ngx_directio(ngx_fd_t fd); -#define ngx_directio_n "fcntl(O_DIRECT)" +ngx_int_t ngx_directio_on(ngx_fd_t fd); +#define ngx_directio_on_n "fcntl(O_DIRECT)" + +ngx_int_t ngx_directio_off(ngx_fd_t fd); +#define ngx_directio_off_n "fcntl(!O_DIRECT)" #elif (NGX_HAVE_F_NOCACHE) -#define ngx_directio(fd) fcntl(fd, F_NOCACHE, 1) -#define ngx_directio_n "fcntl(F_NOCACHE)" +#define ngx_directio_on(fd) fcntl(fd, F_NOCACHE, 1) +#define ngx_directio_on_n "fcntl(F_NOCACHE, 1)" #elif (NGX_HAVE_DIRECTIO) -#define ngx_directio(fd) directio(fd, DIRECTIO_ON) -#define ngx_directio_n "directio(DIRECTIO_ON)" +#define ngx_directio_on(fd) directio(fd, DIRECTIO_ON) +#define ngx_directio_on_n "directio(DIRECTIO_ON)" #else -#define ngx_directio(fd) 0 -#define ngx_directio_n "ngx_directio_n" +#define ngx_directio_on(fd) 0 +#define ngx_directio_on_n "ngx_directio_on_n" #endif |