* then we'll just skip the file on this pass. */
if (g_mutex_trylock(cachefile->lock)) {
int64_t age = bluesky_get_current_time() - cachefile->atime;
- g_print("%s addr=%p mapcount=%d refcount=%d atime_age=%f",
+ g_print("%s addr=%p mapcount=%d refcount=%d size=%d atime_age=%f",
cachefile->filename, cachefile->addr, cachefile->mapcount,
- cachefile->refcount, age / 1e6);
+ cachefile->refcount, cachefile->disk_used, age / 1e6);
if (cachefile->fetching)
g_print(" (fetching)");
g_print("\n");
cachefile->filename);
}
- g_atomic_int_add(&fs->log->disk_used, -(cachefile->len / 1024));
+ g_atomic_int_add(&fs->log->disk_used, -cachefile->disk_used);
g_hash_table_remove(fs->log->mmap_cache, cachefile->filename);
bluesky_rangeset_free(cachefile->items);
g_mutex_unlock(cachefile->lock);
return;
fdatasync(log->fd);
+
+ /* Update disk-space usage statistics for the journal file. */
+ g_atomic_int_add(&log->disk_used, -log->current_log->disk_used);
+ struct stat statbuf;
+ if (fstat(log->fd, &statbuf) >= 0) {
+ /* Convert from 512-byte blocks to 1-kB units */
+ log->current_log->disk_used = (statbuf.st_blocks + 1) / 2;
+ }
+ g_atomic_int_add(&log->disk_used, log->current_log->disk_used);
+
while (log->committed != NULL) {
BlueSkyCloudLog *item = (BlueSkyCloudLog *)log->committed->data;
g_mutex_lock(item->lock);
cloudlog_partial_fetch_start(cachefile, async->start, async->len);
}
+ /* Update disk-space usage statistics, since the writes above may have
+ * consumed more space. */
+ g_atomic_int_add(&cachefile->log->disk_used, -cachefile->disk_used);
+ struct stat statbuf;
+ if (fstatat(cachefile->log->dirfd, cachefile->filename, &statbuf, 0) >= 0) {
+ /* Convert from 512-byte blocks to 1-kB units */
+ cachefile->disk_used = (statbuf.st_blocks + 1) / 2;
+ }
+ g_atomic_int_add(&cachefile->log->disk_used, cachefile->disk_used);
+
bluesky_cachefile_unref(cachefile);
g_cond_broadcast(cachefile->cond);
g_mutex_unlock(cachefile->lock);
off_t length = lseek(fd, 0, SEEK_END);
map->addr = (const char *)mmap(NULL, length, PROT_READ, MAP_SHARED,
fd, 0);
- g_atomic_int_add(&log->disk_used, -(map->len / 1024));
map->len = length;
- g_atomic_int_add(&log->disk_used, map->len / 1024);
g_atomic_int_inc(&map->refcount);