X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Ffile.c;h=7b11e70e4512d0ef169d465aa13557e8da6e3012;hb=6955b27db8185d222adb07e57d207f7f421037e6;hp=d3ba5f8abef9c633140ebbc9efdc4d4610ec56ae;hpb=3380ff6d419c7d1370c95cf476520ed5398e5b6d;p=bluesky.git diff --git a/bluesky/file.c b/bluesky/file.c index d3ba5f8..7b11e70 100644 --- a/bluesky/file.c +++ b/bluesky/file.c @@ -44,8 +44,6 @@ void bluesky_block_touch(BlueSkyInode *inode, uint64_t i) break; } - if (block->type != BLUESKY_BLOCK_REF && block->type != BLUESKY_BLOCK_DIRTY) - g_atomic_int_add(&inode->fs->cache_total, 1); if (block->type != BLUESKY_BLOCK_DIRTY) g_atomic_int_add(&inode->fs->cache_dirty, 1); @@ -95,11 +93,8 @@ void bluesky_file_truncate(BlueSkyInode *inode, uint64_t size) g_array_set_size(inode->blocks, blocks); } else if (blocks < inode->blocks->len) { /* Delete blocks from a file. Must reclaim memory. */ - for (guint i = inode->blocks->len; i < blocks; i++) { + for (guint i = blocks; i < inode->blocks->len; i++) { BlueSkyBlock *b = &g_array_index(inode->blocks, BlueSkyBlock, i); - if (b->type == BLUESKY_BLOCK_REF - || b->type == BLUESKY_BLOCK_DIRTY) - g_atomic_int_add(&inode->fs->cache_total, -1); if (b->type == BLUESKY_BLOCK_DIRTY) g_atomic_int_add(&inode->fs->cache_dirty, -1); bluesky_string_unref(b->dirty); @@ -233,7 +228,6 @@ void bluesky_block_fetch(BlueSkyInode *inode, BlueSkyBlock *block, bluesky_cloudlog_fetch(block->ref); g_mutex_unlock(block->ref->lock); block->type = BLUESKY_BLOCK_REF; - g_atomic_int_add(&inode->fs->cache_total, 1); //FIXME } /* Write the given block to cloud-backed storage and mark it clean. */ @@ -247,10 +241,11 @@ void bluesky_block_flush(BlueSkyInode *inode, BlueSkyBlock *block, g_assert(block->ref == NULL); - BlueSkyCloudLog *cloudlog = bluesky_cloudlog_new(fs); + BlueSkyCloudLog *cloudlog = bluesky_cloudlog_new(fs, NULL); cloudlog->type = LOGTYPE_DATA; cloudlog->inum = inode->inum; cloudlog->data = block->dirty; // String ownership is transferred + bluesky_cloudlog_stats_update(cloudlog, 1); bluesky_cloudlog_sync(cloudlog); bluesky_cloudlog_ref(cloudlog); // Reference for log_items list *log_items = g_list_prepend(*log_items, cloudlog); @@ -287,11 +282,12 @@ void bluesky_file_drop_cached(BlueSkyInode *inode) && g_atomic_int_get(&b->ref->data_lock_count) == 0 && (b->ref->location_flags != 0)) { + bluesky_cloudlog_stats_update(b->ref, -1); bluesky_string_unref(b->ref->data); b->ref->data = NULL; + bluesky_cloudlog_stats_update(b->ref, 1); } g_mutex_unlock(b->ref->lock); - g_atomic_int_add(&inode->fs->cache_total, -1); } } }