diff options
author | Chris Mason <chris.mason@oracle.com> | 2011-01-31 16:48:24 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-01-31 16:48:24 -0500 |
commit | b31eabd86eb68d3c217e6821078249bc045e698a (patch) | |
tree | a6453484e1404ab2f92affad0225b3929dff5df6 | |
parent | b1953bcec95c189b1eea690a08e89646d7750bda (diff) |
Btrfs: catch errors from btrfs_sync_log
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>
-rw-r--r-- | fs/btrfs/tree-log.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index c25a41d86118..42dfc3077040 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
@@ -2051,6 +2051,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans, | |||
2051 | wait_log_commit(trans, log_root_tree, | 2051 | wait_log_commit(trans, log_root_tree, |
2052 | log_root_tree->log_transid); | 2052 | log_root_tree->log_transid); |
2053 | mutex_unlock(&log_root_tree->log_mutex); | 2053 | mutex_unlock(&log_root_tree->log_mutex); |
2054 | ret = 0; | ||
2054 | goto out; | 2055 | goto out; |
2055 | } | 2056 | } |
2056 | atomic_set(&log_root_tree->log_commit[index2], 1); | 2057 | atomic_set(&log_root_tree->log_commit[index2], 1); |
@@ -2115,7 +2116,7 @@ out: | |||
2115 | smp_mb(); | 2116 | smp_mb(); |
2116 | if (waitqueue_active(&root->log_commit_wait[index1])) | 2117 | if (waitqueue_active(&root->log_commit_wait[index1])) |
2117 | wake_up(&root->log_commit_wait[index1]); | 2118 | wake_up(&root->log_commit_wait[index1]); |
2118 | return 0; | 2119 | return ret; |
2119 | } | 2120 | } |
2120 | 2121 | ||
2121 | static void free_log_tree(struct btrfs_trans_handle *trans, | 2122 | static void free_log_tree(struct btrfs_trans_handle *trans, |