Mercurial > hg > nginx
comparison src/os/unix/ngx_files.h @ 4498:569ea17767bf
Workaround for fs_size on ZFS (ticket #46).
ZFS reports incorrect st_blocks until file settles on disk, and this
may take a while (i.e. just after creation of a file the st_blocks value
is incorrect). As a workaround we now use st_blocks only if
st_blocks * 512 > st_size, this should fix ZFS problems while still
preserving accuracy for other filesystems.
The problem had appeared in r3900 (1.0.1).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 28 Feb 2012 11:09:02 +0000 |
parents | d33ce8cd0d70 |
children | 8865fd1f3aa5 |
comparison
equal
deleted
inserted
replaced
4497:95ab6658654a | 4498:569ea17767bf |
---|---|
178 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) | 178 #define ngx_is_file(sb) (S_ISREG((sb)->st_mode)) |
179 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) | 179 #define ngx_is_link(sb) (S_ISLNK((sb)->st_mode)) |
180 #define ngx_is_exec(sb) (((sb)->st_mode & S_IXUSR) == S_IXUSR) | 180 #define ngx_is_exec(sb) (((sb)->st_mode & S_IXUSR) == S_IXUSR) |
181 #define ngx_file_access(sb) ((sb)->st_mode & 0777) | 181 #define ngx_file_access(sb) ((sb)->st_mode & 0777) |
182 #define ngx_file_size(sb) (sb)->st_size | 182 #define ngx_file_size(sb) (sb)->st_size |
183 #define ngx_file_fs_size(sb) ((sb)->st_blocks * 512) | 183 #define ngx_file_fs_size(sb) ngx_max((sb)->st_size, (sb)->st_blocks * 512) |
184 #define ngx_file_mtime(sb) (sb)->st_mtime | 184 #define ngx_file_mtime(sb) (sb)->st_mtime |
185 #define ngx_file_uniq(sb) (sb)->st_ino | 185 #define ngx_file_uniq(sb) (sb)->st_ino |
186 | 186 |
187 | 187 |
188 ngx_int_t ngx_create_file_mapping(ngx_file_mapping_t *fm); | 188 ngx_int_t ngx_create_file_mapping(ngx_file_mapping_t *fm); |
274 | 274 |
275 #endif | 275 #endif |
276 | 276 |
277 #define ngx_de_access(dir) (((dir)->info.st_mode) & 0777) | 277 #define ngx_de_access(dir) (((dir)->info.st_mode) & 0777) |
278 #define ngx_de_size(dir) (dir)->info.st_size | 278 #define ngx_de_size(dir) (dir)->info.st_size |
279 #define ngx_de_fs_size(dir) ((dir)->info.st_blocks * 512) | 279 #define ngx_de_fs_size(dir) \ |
280 ngx_max((dir)->info.st_size, (dir)->info.st_blocks * 512) | |
280 #define ngx_de_mtime(dir) (dir)->info.st_mtime | 281 #define ngx_de_mtime(dir) (dir)->info.st_mtime |
281 | 282 |
282 | 283 |
283 ngx_int_t ngx_open_glob(ngx_glob_t *gl); | 284 ngx_int_t ngx_open_glob(ngx_glob_t *gl); |
284 #define ngx_open_glob_n "glob()" | 285 #define ngx_open_glob_n "glob()" |