aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2023-03-29 17:49:32 +0200
committerTheodore Ts'o <tytso@mit.edu>2023-04-14 19:38:50 -0400
commitbd159398a2d2234de07d310132865706964aaaa7 (patch)
tree2bbd16ea424fee29141d52c3dd427aa16af8eb8e
parentext4: Use a folio in ext4_read_merkle_tree_page (diff)
downloadwireguard-linux-bd159398a2d2234de07d310132865706964aaaa7.tar.xz
wireguard-linux-bd159398a2d2234de07d310132865706964aaaa7.zip
jdb2: Don't refuse invalidation of already invalidated buffers
When invalidating buffers under the partial tail page, jbd2_journal_invalidate_folio() returns -EBUSY if the buffer is part of the committing transaction as we cannot safely modify buffer state. However if the buffer is already invalidated (due to previous invalidation attempts from ext4_wait_for_tail_page_commit()), there's nothing to do and there's no point in returning -EBUSY. This fixes occasional warnings from ext4_journalled_invalidate_folio() triggered by generic/051 fstest when blocksize < pagesize. Fixes: 53e872681fed ("ext4: fix deadlock in journal_unmap_buffer()") Signed-off-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20230329154950.19720-1-jack@suse.cz Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--fs/jbd2/transaction.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c
index 15de1385012e..18611241f451 100644
--- a/fs/jbd2/transaction.c
+++ b/fs/jbd2/transaction.c
@@ -2387,6 +2387,9 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,
spin_unlock(&jh->b_state_lock);
write_unlock(&journal->j_state_lock);
jbd2_journal_put_journal_head(jh);
+ /* Already zapped buffer? Nothing to do... */
+ if (!bh->b_bdev)
+ return 0;
return -EBUSY;
}
/*