#endif
g_mutex_lock(inode->fs->lock);
+ bluesky_list_unlink(&inode->fs->unlogged_list, inode->unlogged_list);
+ inode->unlogged_list = bluesky_list_prepend(&inode->fs->unlogged_list, inode);
bluesky_list_unlink(&inode->fs->dirty_list, inode->dirty_list);
inode->dirty_list = bluesky_list_prepend(&inode->fs->dirty_list, inode);
bluesky_list_unlink(&inode->fs->accessed_list, inode->accessed_list);
fs->locations = g_hash_table_new(bluesky_cloudlog_hash,
bluesky_cloudlog_equal);
+ fs->log_state = g_new0(BlueSkyCloudLogState, 1);
+ fs->log_state->data = g_string_new("");
+
return fs;
}
/* Sanity check: Is the inode clean? */
if (inode->change_commit < inode->change_count
|| inode->accessed_list != NULL
+ || inode->unlogged_list != NULL
|| inode->dirty_list != NULL) {
g_warning("Dropping inode which is not clean (commit %"PRIi64" < change %"PRIi64"; accessed_list = %p; dirty_list = %p)\n", inode->change_commit, inode->change_count, inode->accessed_list, inode->dirty_list);
}
g_mutex_lock(inode->fs->lock);
bluesky_list_unlink(&inode->fs->accessed_list, inode->accessed_list);
bluesky_list_unlink(&inode->fs->dirty_list, inode->dirty_list);
+ bluesky_list_unlink(&inode->fs->unlogged_list, inode->unlogged_list);
g_mutex_unlock(inode->fs->lock);
/* Free file type specific data. It should be an error for there to be
sprintf(key, "inode-%016"PRIx64, inode->inum);
BlueSkyCloudLog *cloudlog = bluesky_cloudlog_new(fs);
- cloudlog->type = LOGTYPE_DATA;
+ cloudlog->type = LOGTYPE_INODE;
cloudlog->inum = inode->inum;
cloudlog->data = data;
bluesky_string_ref(data);
+ if (inode->type == BLUESKY_REGULAR) {
+ for (int i = 0; i < inode->blocks->len; i++) {
+ BlueSkyBlock *b = &g_array_index(inode->blocks, BlueSkyBlock, i);
+ if (b->type == BLUESKY_BLOCK_CACHED
+ || b->type == BLUESKY_BLOCK_REF)
+ {
+ BlueSkyCloudID id = bluesky_cloudlog_id_from_string(b->ref);
+ g_array_append_val(cloudlog->pointers, id);
+ }
+ }
+ }
+
log_items = g_list_prepend(log_items, bluesky_cloudlog_sync(cloudlog));
bluesky_cloudlog_insert(cloudlog);