Flush file blocks to storage before the inode.
authorMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 27 Jan 2010 19:49:59 +0000 (11:49 -0800)
committerMichael Vrable <mvrable@cs.ucsd.edu>
Wed, 27 Jan 2010 19:49:59 +0000 (11:49 -0800)
Otherwise, some blocks might not have been assigned a name and so
seriaizing the inode will lose data.

bluesky/inode.c

index a052fb4..3c6fa3c 100644 (file)
@@ -232,13 +232,13 @@ void bluesky_inode_start_sync(BlueSkyInode *inode, BlueSkyStoreAsync *barrier)
 {
     BlueSkyFS *fs = inode->fs;
 
+    if (inode->type == BLUESKY_REGULAR)
+        bluesky_file_flush(inode, barrier);
+
     GString *buf = g_string_new("");
     bluesky_serialize_inode(buf, inode);
     BlueSkyRCStr *data = bluesky_string_new_from_gstring(buf);
 
-    if (inode->type == BLUESKY_REGULAR)
-        bluesky_file_flush(inode, barrier);
-
     char key[64];
     sprintf(key, "inode-%016"PRIx64, inode->inum);