Browse Source

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>
Chris Mason 14 years ago
parent
commit
b31eabd86e
1 changed files with 2 additions and 1 deletions
  1. 2 1
      fs/btrfs/tree-log.c

+ 2 - 1
fs/btrfs/tree-log.c

@@ -2051,6 +2051,7 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
 		wait_log_commit(trans, log_root_tree,
 		wait_log_commit(trans, log_root_tree,
 				log_root_tree->log_transid);
 				log_root_tree->log_transid);
 		mutex_unlock(&log_root_tree->log_mutex);
 		mutex_unlock(&log_root_tree->log_mutex);
+		ret = 0;
 		goto out;
 		goto out;
 	}
 	}
 	atomic_set(&log_root_tree->log_commit[index2], 1);
 	atomic_set(&log_root_tree->log_commit[index2], 1);
@@ -2115,7 +2116,7 @@ out:
 	smp_mb();
 	smp_mb();
 	if (waitqueue_active(&root->log_commit_wait[index1]))
 	if (waitqueue_active(&root->log_commit_wait[index1]))
 		wake_up(&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,
 static void free_log_tree(struct btrfs_trans_handle *trans,