VisionFive2 Linux kernel

StarFive Tech Linux Kernel for VisionFive (JH7110) boards (mirror)

More than 9999 Commits   32 Branches   54 Tags
author: Jan Kara <jack@suse.cz> 2011-05-08 19:09:53 -0400 committer: Theodore Ts'o <tytso@mit.edu> 2011-05-08 19:09:53 -0400 commit: 229309caebe4508d650bb6d8f7d51f2b116f5bbd parent: 667eff35a1f56fa74ce98a0c7c29a40adc1ba4e3
Commit Summary:
jbd2: Fix forever sleeping process in do_get_write_access()
Diffstat:
1 file changed, 7 insertions, 2 deletions
diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
index 6e28000a4b21..78c299218681 100644
--- a/fs/jbd2/commit.c
+++ b/fs/jbd2/commit.c
@@ -760,8 +760,13 @@ wait_for_iobuf:
                    required. */
 		JBUFFER_TRACE(jh, "file as BJ_Forget");
 		jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget);
-		/* Wake up any transactions which were waiting for this
-		   IO to complete */
+		/*
+		 * Wake up any transactions which were waiting for this IO to
+		 * complete. The barrier must be here so that changes by
+		 * jbd2_journal_file_buffer() take effect before wake_up_bit()
+		 * does the waitqueue check.
+		 */
+		smp_mb();
 		wake_up_bit(&bh->b_state, BH_Unshadow);
 		JBUFFER_TRACE(jh, "brelse shadowed buffer");
 		__brelse(bh);