Btrfs: catch errors from btrfs_sync_log
authorChris Mason <chris.mason@oracle.com>
Mon, 31 Jan 2011 21:48:24 +0000 (16:48 -0500)
committerChris Mason <chris.mason@oracle.com>
Mon, 31 Jan 2011 21:48:24 +0000 (16:48 -0500)
btrfs_sync_log returns -EAGAIN when we need full transaction commits
instead of small log commits, but sometimes we were dropping the return
value.

In practice, we check for this a few different ways, but this is still a
bug that can leave off full log commits when we really need them.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/tree-log.c

index c25a41d86118ae922688541bf0d8a8687e6d12d1..42dfc307704016d6ed4dc1ec434c0b686db73f7e 100644 (file)
@@ -2051,6 +2051,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
                wait_log_commit(trans, log_root_tree,
                                log_root_tree->log_transid);
                mutex_unlock(&log_root_tree->log_mutex);
+               ret = 0;
                goto out;
        }
        atomic_set(&log_root_tree->log_commit[index2], 1);
@@ -2115,7 +2116,7 @@ out:
        smp_mb();
        if (waitqueue_active(&root->log_commit_wait[index1]))
                wake_up(&root->log_commit_wait[index1]);
-       return 0;
+       return ret;
 }
 
 static void free_log_tree(struct btrfs_trans_handle *trans,