switch (block->type) {
case BLUESKY_BLOCK_ZERO:
- g_print("Allocating zero block of size %zd\n", block_len);
block->data = bluesky_string_new(g_malloc0(block_len), block_len);
break;
case BLUESKY_BLOCK_REF:
if (size == inode->size)
return;
- g_print("Truncating file to %"PRIi64" bytes\n", size);
+ if (bluesky_verbose) {
+ g_log("bluesky/file", G_LOG_LEVEL_DEBUG,
+ "Truncating file to %"PRIi64" bytes", size);
+ }
uint64_t blocks = (size + BLUESKY_BLOCK_SIZE - 1) / BLUESKY_BLOCK_SIZE;
void bluesky_file_write(BlueSkyInode *inode, uint64_t offset,
const char *data, gint len)
{
- g_print("Write %d bytes at offset %"PRIi64"\n", len, offset);
-
g_return_if_fail(inode->type == BLUESKY_REGULAR);
g_return_if_fail(offset < inode->size);
g_return_if_fail(len <= inode->size - offset);
void bluesky_file_read(BlueSkyInode *inode, uint64_t offset,
char *buf, gint len)
{
- g_print("Read %d bytes at offset %"PRIi64"\n", len, offset);
-
if (len == 0 && offset <= inode->size)
return;
uint64_t start_block, end_block;
start_block = offset / BLUESKY_BLOCK_SIZE;
end_block = (offset + len - 1) / BLUESKY_BLOCK_SIZE;
- g_print("Start prefetch on blocks %"PRIi64" .. %"PRIi64"\n",
- start_block, end_block);
+ 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);
bluesky_store_async_submit(barrier);
bluesky_store_async_wait(barrier);
bluesky_store_async_unref(barrier);
- g_print("Prefetch complete.\n");
+ if (bluesky_verbose) {
+ g_log("bluesky/file", G_LOG_LEVEL_DEBUG, "Prefetch complete.");
+ }
while (len > 0) {
uint64_t block_num = offset / BLUESKY_BLOCK_SIZE;
bluesky_string_unref(block->data);
block->data = async->data;
bluesky_string_ref(block->data);
+
+ if (block->data == NULL) {
+ g_warning("Failed to fetch data block from store!\n");
+ block->data = bluesky_string_new(g_malloc0(BLUESKY_BLOCK_SIZE),
+ BLUESKY_BLOCK_SIZE);
+ }
+
block->type = BLUESKY_BLOCK_CACHED;
}
for (int i = 0; i < inode->blocks->len; i++) {
BlueSkyBlock *b = &g_array_index(inode->blocks, BlueSkyBlock, i);
if (b->type == BLUESKY_BLOCK_CACHED) {
- g_log("bluesky/cache", G_LOG_LEVEL_DEBUG,
- "Dropping block %d of inode %"PRIu64" from cache",
- i, inode->inum);
+ if (bluesky_verbose) {
+ g_log("bluesky/cache", G_LOG_LEVEL_DEBUG,
+ "Dropping block %d of inode %"PRIu64" from cache",
+ i, inode->inum);
+ g_log("bluesky/cache", G_LOG_LEVEL_DEBUG,
+ " (reference count was %d)", b->data->refcount);
+ }
- g_log("bluesky/cache", G_LOG_LEVEL_DEBUG,
- " (reference count was %d)", b->data->refcount);
bluesky_string_unref(b->data);
b->data = NULL;
b->type = BLUESKY_BLOCK_REF;