summaryrefslogtreecommitdiffstats
path: root/fs/reiserfs
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-04-30 23:04:32 +0200
committerFrederic Weisbecker <fweisbec@gmail.com>2009-09-14 07:18:08 +0200
commite6950a4da33fa84ef4402d29e2331cd5e5df9cb8 (patch)
tree05650bb6b4fc7c148253dd3c7c4222c2783f84d3 /fs/reiserfs
parentf32049dc244f4d394c8faa161b4f13cb8c4f5c8c (diff)
downloadkernel-crypto-e6950a4da33fa84ef4402d29e2331cd5e5df9cb8.tar.gz
kernel-crypto-e6950a4da33fa84ef4402d29e2331cd5e5df9cb8.tar.xz
kernel-crypto-e6950a4da33fa84ef4402d29e2331cd5e5df9cb8.zip
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>
Diffstat (limited to 'fs/reiserfs')
-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 0ba98ca367c..5cd600baf8c 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,
next = cn->next;
free_cnode(sb, cn);
cn = next;
+ reiserfs_write_unlock(sb);
cond_resched();
+ reiserfs_write_lock(sb);
}
/* we are done with both the c_bh and d_bh, but