kernel-ark/fs/jbd2
Jan Kara 53e872681f ext4: fix deadlock in journal_unmap_buffer()
We cannot wait for transaction commit in journal_unmap_buffer()
because we hold page lock which ranks below transaction start.  We
solve the issue by bailing out of journal_unmap_buffer() and
jbd2_journal_invalidatepage() with -EBUSY.  Caller is then responsible
for waiting for transaction commit to finish and try invalidation
again. Since the issue can happen only for page stradding i_size, it
is simple enough to manually call jbd2_journal_invalidatepage() for
such page from ext4_setattr(), check the return value and wait if
necessary.

Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
2012-12-25 13:29:52 -05:00
..
checkpoint.c jbd2: remove bh_state lock from checkpointing code 2012-03-13 22:45:25 -04:00
commit.c jbd2: fix assertion failure in commit code due to lacking transaction credits 2012-09-26 23:11:13 -04:00
journal.c ext4: remove ext4_handle_release_buffer() 2012-11-08 11:22:46 -05:00
Kconfig jbd2: Grab a reference to the crc32c driver if necessary 2012-05-27 07:50:56 -04:00
Makefile
recovery.c jbd2: check return value of blkdev_issue_flush() 2012-08-17 09:56:17 -04:00
revoke.c jbd2: checksum revocation blocks 2012-05-27 08:08:24 -04:00
transaction.c ext4: fix deadlock in journal_unmap_buffer() 2012-12-25 13:29:52 -05:00