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()"