of->uniq = ngx_file_uniq(&fi);
of->mtime = ngx_file_mtime(&fi);
of->size = ngx_file_size(&fi);
+ of->fs_size = ngx_file_fs_size(&fi);
of->is_dir = ngx_is_dir(&fi);
of->is_file = ngx_is_file(&fi);
of->is_link = ngx_is_link(&fi);
of->uniq = ngx_file_uniq(&fi);
of->mtime = ngx_file_mtime(&fi);
of->size = ngx_file_size(&fi);
+ of->fs_size = ngx_file_fs_size(&fi);
of->is_dir = ngx_is_dir(&fi);
of->is_file = ngx_is_file(&fi);
of->is_link = ngx_is_link(&fi);
c->file.log = r->connection->log;
c->uniq = of.uniq;
c->length = of.size;
+ c->fs_size = (of.fs_size + cache->bsize - 1) / cache->bsize;
c->buf = ngx_create_temp_buf(r->pool, c->body_start);
if (c->buf == NULL) {
c->node->exists = 1;
c->node->uniq = c->uniq;
- cache->sh->size += (c->length + cache->bsize - 1) / cache->bsize;
+ cache->sh->size += c->fs_size;
}
ngx_shmtx_unlock(&cache->shpool->mutex);
fcn->valid_sec = 0;
fcn->uniq = 0;
fcn->body_start = 0;
- fcn->length = 0;
+ fcn->fs_size = 0;
done:
void
ngx_http_file_cache_update(ngx_http_request_t *r, ngx_temp_file_t *tf)
{
- off_t size, length;
+ off_t fs_size;
ngx_int_t rc;
ngx_file_uniq_t uniq;
ngx_file_info_t fi;
cache = c->file_cache;
uniq = 0;
- length = 0;
+ fs_size = 0;
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http file cache rename: \"%s\" to \"%s\"",
} else {
uniq = ngx_file_uniq(&fi);
- length = ngx_file_size(&fi);
+ fs_size = (ngx_file_fs_size(&fi) + cache->bsize - 1) / cache->bsize;
}
}
- size = (length + cache->bsize - 1) / cache->bsize;
-
ngx_shmtx_lock(&cache->shpool->mutex);
c->node->count--;
c->node->uniq = uniq;
c->node->body_start = c->body_start;
- size = size - (c->node->length + cache->bsize - 1) / cache->bsize;
-
- c->node->length = length;
-
- cache->sh->size += size;
+ cache->sh->size += fs_size - c->node->fs_size;
+ c->node->fs_size = fs_size;
if (rc == NGX_OK) {
c->node->exists = 1;
fcn = ngx_queue_data(q, ngx_http_file_cache_node_t, queue);
if (fcn->exists) {
- cache->sh->size -= (fcn->length + cache->bsize - 1) / cache->bsize;
+ cache->sh->size -= fcn->fs_size;
path = cache->path;
p = name + path->name.len + 1 + path->len;
return NGX_ERROR;
}
+ cache = ctx->data;
+
if (ngx_fd_info(fd, &fi) == NGX_FILE_ERROR) {
ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
ngx_fd_info_n " \"%s\" failed", name->data);
c.valid_msec = h.valid_msec;
c.body_start = h.body_start;
c.length = ngx_file_size(&fi);
+ c.fs_size = (ngx_file_fs_size(&fi) + cache->bsize - 1) / cache->bsize;
}
if (ngx_close_file(fd) == NGX_FILE_ERROR) {
c.key[i] = (u_char) n;
}
- cache = ctx->data;
-
return ngx_http_file_cache_add(cache, &c);
}
fcn->uniq = c->uniq;
fcn->valid_sec = c->valid_sec;
fcn->body_start = c->body_start;
- fcn->length = c->length;
+ fcn->fs_size = c->fs_size;
- cache->sh->size += (c->length + cache->bsize - 1) / cache->bsize;
+ cache->sh->size += c->fs_size;
} else {
ngx_queue_remove(&fcn->queue);