aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-04-30 17:04:32 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2009-09-14 01:18:08 -0400
commite6950a4da33fa84ef4402d29e2331cd5e5df9cb8 (patch)
tree05650bb6b4fc7c148253dd3c7c4222c2783f84d3
parentf32049dc244f4d394c8faa161b4f13cb8c4f5c8c (diff)
kill-the-BKL/reiserfs: release the write lock before rescheduling on do_journal_end()
When do_journal_end() copies data to the journal blocks buffers in memory, it reschedules if needed between each block copied and dirtyfied. We can also release the write lock at this rescheduling stage, like did the bkl implicitly. [ Impact: release the reiserfs write lock when it is not needed ] Cc: Jeff Mahoney <jeffm@suse.com> Cc: Chris Mason <chris.mason@oracle.com> Cc: Alexander Beregalov <a.beregalov@gmail.com> Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
-rw-r--r--fs/reiserfs/journal.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
index 0ba98ca367c7..5cd600baf8cf 100644
--- a/fs/reiserfs/journal.c
+++ b/fs/reiserfs/journal.c
@@ -4232,7 +4232,9 @@ static int do_journal_end(struct reiserfs_transaction_handle *th,
4232 next = cn->next; 4232 next = cn->next;
4233 free_cnode(sb, cn); 4233 free_cnode(sb, cn);
4234 cn = next; 4234 cn = next;
4235 reiserfs_write_unlock(sb);
4235 cond_resched(); 4236 cond_resched();
4237 reiserfs_write_lock(sb);
4236 } 4238 }
4237 4239
4238 /* we are done with both the c_bh and d_bh, but 4240 /* we are done with both the c_bh and d_bh, but