[PATCH v2 4/5] btrfs: check for exit condition after waking in wait_log_commit()
[email protected] Wed, 22 Jul 2026 16:24:41 +0100
| Newsgroups | org.kernel.vger.linux-btrfs |
|---|---|
| Message-ID | <3a13f0663e98ee665922226c64b4577f31b13327.1784733396.git.fdmanana@suse.com> |
From: Filipe Manana <[email protected]> We check for the exit condition after we add ourselves to the wait queue and before we unlock the root's log_mutex, sleep and lock again log_mutex. This is not incorrect, but it's not optimal since in the first iteration this is pointless because we already know that root->log_commit[index] is not zero, so we should check the exit condition only after unlocking log_mutex, sleeping, waking up and locking again the log_mutex. So move the check for the exit condition to bottom of the loop, after we were woken and locked log_mutex again. Signed-off-by: Filipe Manana <[email protected]> --- fs/btrfs/tree-log.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index b6ed6671ee26..fe96810d3363 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3182,13 +3182,13 @@ static bool wait_log_commit(struct btrfs_root *root, int transid) prepare_to_wait(&root->log_commit_wait[index], &wait, TASK_UNINTERRUPTIBLE); - if (!(root->log_transid_committed < transid && - atomic_read(&root->log_commit[index]))) - break; - mutex_unlock(&root->log_mutex); schedule(); mutex_lock(&root->log_mutex); + + if (!(root->log_transid_committed < transid && + atomic_read(&root->log_commit[index]) != 0)) + break; } finish_wait(&root->log_commit_wait[index], &wait); -- 2.47.2