aboutsummaryrefslogtreecommitdiff
path: root/init
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2005-09-06 15:19:17 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-07 16:57:57 -0700
commit4407c2b6b297339e296facf62e020cf66e55053d (patch)
tree485d60b1cb5c6013d09a0327355e216b202bd8ed /init
parente39f07c83bac96850265b87a69dfc5c90ed4f1f5 (diff)
[PATCH] Fix race in do_get_write_access()
attached patch should fix the following race: Proc 1 Proc 2 __flush_batch() ll_rw_block() do_get_write_access() lock_buffer jh is only waiting for checkpoint -> b_transaction == NULL -> do nothing unlock_buffer test_set_buffer_locked() test_clear_buffer_dirty() __journal_file_buffer() change the data submit_bh() and we have sent wrong data to disk... We now clean the dirty buffer flag under buffer lock in all cases and hence we know that whenever a buffer is starting to be journaled we either finish the pending write-out before attaching a buffer to a transaction or we won't write the buffer until the transaction is going to be committed. The test in jbd_unexpected_dirty_buffer() is redundant - remove it. Furthermore we have to clear the buffer dirty bit under the buffer lock to prevent races with buffer write-out (and hence prevent returning a buffer with IO happening). Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'init')
0 files changed, 0 insertions, 0 deletions