X-Git-Url: http://git.vrable.net/?a=blobdiff_plain;f=bluesky%2Ffile.c;h=5c4b157febaf6956dd2c55d524184e9691a55c0c;hb=f596f1356cc523ace9ae6d2f91f08f982bae455b;hp=0c92e69a18b543ff43d87f0320e9444a8f28a711;hpb=870ff381b99c54615457d1cea92e710bc68e194b;p=bluesky.git diff --git a/bluesky/file.c b/bluesky/file.c index 0c92e69..5c4b157 100644 --- a/bluesky/file.c +++ b/bluesky/file.c @@ -93,7 +93,7 @@ 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_DIRTY) g_atomic_int_add(&inode->fs->cache_dirty, -1); @@ -166,31 +166,22 @@ void bluesky_file_read(BlueSkyInode *inode, uint64_t offset, g_return_if_fail(offset < inode->size); g_return_if_fail(len <= inode->size - offset); -#if 0 - /* Start fetches on any data blocks that we will need for this read. */ - BlueSkyStoreAsync *barrier = bluesky_store_async_new(inode->fs->store); - barrier->op = STORE_OP_BARRIER; + BlueSkyProfile *profile = bluesky_profile_get(); + + bluesky_profile_add_event(profile, + g_strdup_printf("Start file read prefetch")); uint64_t start_block, end_block; start_block = offset / BLUESKY_BLOCK_SIZE; end_block = (offset + len - 1) / BLUESKY_BLOCK_SIZE; - if (bluesky_verbose) { - g_log("bluesky/file", G_LOG_LEVEL_DEBUG, - "Start prefetch on blocks %"PRIi64" .. %"PRIi64, - start_block, end_block); - } for (uint64_t i = start_block; i <= end_block; i++) { BlueSkyBlock *b = &g_array_index(inode->blocks, BlueSkyBlock, i); if (b->type == BLUESKY_BLOCK_REF) - bluesky_block_fetch(inode, b, barrier); + bluesky_cloudlog_prefetch(b->ref); } - bluesky_store_async_submit(barrier); - bluesky_store_async_wait(barrier); - bluesky_store_async_unref(barrier); - if (bluesky_verbose) { - g_log("bluesky/file", G_LOG_LEVEL_DEBUG, "Prefetch complete."); - } -#endif + + bluesky_profile_add_event(profile, + g_strdup_printf("End file read prefetch")); while (len > 0) { uint64_t block_num = offset / BLUESKY_BLOCK_SIZE; @@ -216,6 +207,9 @@ void bluesky_file_read(BlueSkyInode *inode, uint64_t offset, buf += bytes; len -= bytes; } + + bluesky_profile_add_event(profile, + g_strdup_printf("BlueSky read complete")); } void bluesky_block_fetch(BlueSkyInode *inode, BlueSkyBlock *block, @@ -241,7 +235,7 @@ 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 @@ -287,9 +281,6 @@ void bluesky_file_drop_cached(BlueSkyInode *inode) b->ref->data = NULL; bluesky_cloudlog_stats_update(b->ref, 1); } - if (b->ref->location_flags & CLOUDLOG_CLOUD) { - b->ref->location_flags &= ~CLOUDLOG_JOURNAL; - } g_mutex_unlock(b->ref->lock); } }