open_file_cache related fixes:
*) 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.
*) Bugfix: open_file_cache did not update file info on retest.
If file inode was not changed, cached file information was not updated
on retest. As a result stale information might be cached forever if file
attributes was changed and/or file was extended.
if (of->uniq == file->uniq) {
- file->count++;
-
if (file->event) {
file->use_event = 1;
}
- goto renew;
+ of->is_directio = file->is_directio;
+
+ goto update;
}
/* file was changed */
}
}
-renew:
-
file->created = now;
found:
return aio->nbytes;
}
+ ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno,
+ "aio read \"%s\" failed", file->name.data);
+
return NGX_ERROR;
}
}
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;
}