summaryrefslogtreecommitdiff
path: root/fs/btrfs/tree-log.c
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2019-06-17 10:19:39 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-06-17 10:19:38 -0700
commit4e933027e6848a194b03aa35c26bc20fe06205e9 (patch)
treeab1dda795bb590c589a5af45f0692b3b6f3c3931 /fs/btrfs/tree-log.c
parentc176a066dfd36e31ebaf2796a12b2c523e7083dc (diff)
parent5ef154a26639ad07ed3ebdaea1dabe29065982b0 (diff)
Merge "Merge android-4.4.181 (bd858d7) into msm-4.4"
Diffstat (limited to 'fs/btrfs/tree-log.c')
-rw-r--r--fs/btrfs/tree-log.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index c7190f322576..57a46093656a 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -2809,6 +2809,12 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
log->log_transid = root->log_transid;
root->log_start_pid = 0;
/*
+ * Update or create log root item under the root's log_mutex to prevent
+ * races with concurrent log syncs that can lead to failure to update
+ * log root item because it was not created yet.
+ */
+ ret = update_log_root(trans, log);
+ /*
* IO has been started, blocks of the log tree have WRITTEN flag set
* in their headers. new modifications of the log will be written to
* new positions. so it's safe to allow log writers to go in.
@@ -2827,8 +2833,6 @@ int btrfs_sync_log(struct btrfs_trans_handle *trans,
mutex_unlock(&log_root_tree->log_mutex);
- ret = update_log_root(trans, log);
-
mutex_lock(&log_root_tree->log_mutex);
if (atomic_dec_and_test(&log_root_tree->log_writers)) {
/*