Skip to content

Commit c83b56d

Browse files
Christoph Hellwigkdave
authored andcommitted
btrfs: zero the buffer before marking it dirty in btrfs_redirty_list_add
btrfs_redirty_list_add zeroes the buffer data and sets the EXTENT_BUFFER_NO_CHECK to make sure writeback is fine with a bogus header. But it does that after already marking the buffer dirty, which means that writeback could already be looking at the buffer. Switch the order of operations around so that the buffer is only marked dirty when we're ready to write it. Fixes: d357515 ("btrfs: zoned: redirty released extent buffers") CC: stable@vger.kernel.org # 5.15+ Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
1 parent 02ca9e6 commit c83b56d

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

fs/btrfs/zoned.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,11 +1609,11 @@ void btrfs_redirty_list_add(struct btrfs_transaction *trans,
16091609
!list_empty(&eb->release_list))
16101610
return;
16111611

1612+
memzero_extent_buffer(eb, 0, eb->len);
1613+
set_bit(EXTENT_BUFFER_NO_CHECK, &eb->bflags);
16121614
set_extent_buffer_dirty(eb);
16131615
set_extent_bits_nowait(&trans->dirty_pages, eb->start,
16141616
eb->start + eb->len - 1, EXTENT_DIRTY);
1615-
memzero_extent_buffer(eb, 0, eb->len);
1616-
set_bit(EXTENT_BUFFER_NO_CHECK, &eb->bflags);
16171617

16181618
spin_lock(&trans->releasing_ebs_lock);
16191619
list_add_tail(&eb->release_list, &trans->releasing_ebs);

0 commit comments

Comments
 (0)