diff options
author | Eric Sandeen <sandeen@sandeen.net> | 2006-10-28 10:38:27 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-28 11:30:51 -0700 |
commit | f58a74dca88d48b0669609b4957f3dd757bdc898 (patch) | |
tree | bfd9a7f078d3d017e92fbd75659f35b619ccf188 /fs/jbd/commit.c | |
parent | 1939e49a0cb9d73785857bf312f4f65661b4b513 (diff) | |
download | linux-3.10-f58a74dca88d48b0669609b4957f3dd757bdc898.tar.gz linux-3.10-f58a74dca88d48b0669609b4957f3dd757bdc898.tar.bz2 linux-3.10-f58a74dca88d48b0669609b4957f3dd757bdc898.zip |
[PATCH] jbd: journal_dirty_data re-check for unmapped buffers
When running several fsx's and other filesystem stress tests, we found
cases where an unmapped buffer was still being sent to submit_bh by the
ext3 dirty data journaling code.
I saw this happen in two ways, both related to another thread doing a
truncate which would unmap the buffer in question.
Either we would get into journal_dirty_data with a bh which was already
unmapped (although journal_dirty_data_fn had checked for this earlier, the
state was not locked at that point), or it would get unmapped in the middle
of journal_dirty_data when we dropped locks to call sync_dirty_buffer.
By re-checking for mapped state after we've acquired the bh state lock, we
should avoid these races. If we find a buffer which is no longer mapped,
we essentially ignore it, because journal_unmap_buffer has already decided
that this buffer can go away.
I've also added tracepoints in these two cases, and made a couple other
tracepoint changes that I found useful in debugging this.
Signed-off-by: Eric Sandeen <esandeen@redhat.com>
Cc: <linux-ext4@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/jbd/commit.c')
0 files changed, 0 insertions, 0 deletions