+static void complete_inode_fetch(BlueSkyStoreAsync *async, BlueSkyInode *inode)
+{
+ g_print("Completing fetch of inode %"PRIu64"...\n", inode->inum);
+
+ if (async->result != 0
+ || !bluesky_deserialize_inode(inode, async->data->data))
+ {
+ g_print(" failed to load inode, cleaning up\n");
+ g_mutex_lock(inode->fs->lock);
+ g_hash_table_remove(inode->fs->inodes, &inode->inum);
+ g_mutex_unlock(inode->fs->lock);
+ bluesky_inode_unref(inode);
+ }
+
+ g_mutex_unlock(inode->lock);
+ bluesky_inode_unref(inode);
+}
+
+/* Fetch an inode from stable storage. The fetch can be performed
+ * asynchronously: the in-memory inode is allocated, but not filled with data
+ * immediately. It is kept locked until it has been filled in, so any users
+ * should try to acquire the lock on the inode before accessing any data. The
+ * fs lock must be held. */