diff options
author | Jan Kara <jack@suse.cz> | 2012-12-25 13:29:52 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2012-12-25 13:29:52 -0500 |
commit | 53e872681fed6a43047e71bf927f77d06f467988 (patch) | |
tree | 8b5061acbaf222b3f25df54ddbcaa0b1123c471a /firmware | |
parent | 4520fb3c3690f2643006d85f09ecb74554c10e95 (diff) | |
download | linux-53e872681fed6a43047e71bf927f77d06f467988.tar.bz2 |
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>
Diffstat (limited to 'firmware')
0 files changed, 0 insertions, 0 deletions