diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2019-06-30 03:26:38 -0700 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2019-06-30 03:26:38 -0700 |
| commit | f6f18bf58a688e45e149708a00659bd1010ef94c (patch) | |
| tree | aea1549c4c8f28ad359a92b7702481b2cb369d20 /fs/btrfs/tree-log.c | |
| parent | c9d92a953ba0dffba643376ec463754a88db107a (diff) | |
| parent | 17c66e9e49a181498ae3c75809c98fdbe630de28 (diff) | |
Merge 17c66e9e49a181498ae3c75809c98fdbe630de28 on remote branch
Change-Id: I49238aefe09bba152a8000c046959157c328f183
Diffstat (limited to 'fs/btrfs/tree-log.c')
| -rw-r--r-- | fs/btrfs/tree-log.c | 8 |
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)) { /* |
