btrfs: adjust dirty_metadata_bytes after writeback failure of extent buffer
Before, if a eb failed to write out, we would end up triggering a BUG_ON(). As off4340622e0
("btrfs: extent_io: Move the BUG_ON() in flush_write_bio() one level up"), we no longer BUG_ON(), so we should make life consistent and add back the unwritten bytes to dirty_metadata_bytes. Fixes:f4340622e0
("btrfs: extent_io: Move the BUG_ON() in flush_write_bio() one level up") CC: stable@vger.kernel.org # 5.2+ Reviewed-by: Filipe Manana <fdmanana@kernel.org> Signed-off-by: Dennis Zhou <dennis@kernel.org> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
9f7fec0ba8
commit
eb5b64f142
@ -3728,11 +3728,20 @@ static void end_extent_buffer_writeback(struct extent_buffer *eb)
|
||||
static void set_btree_ioerr(struct page *page)
|
||||
{
|
||||
struct extent_buffer *eb = (struct extent_buffer *)page->private;
|
||||
struct btrfs_fs_info *fs_info;
|
||||
|
||||
SetPageError(page);
|
||||
if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags))
|
||||
return;
|
||||
|
||||
/*
|
||||
* If we error out, we should add back the dirty_metadata_bytes
|
||||
* to make it consistent.
|
||||
*/
|
||||
fs_info = eb->fs_info;
|
||||
percpu_counter_add_batch(&fs_info->dirty_metadata_bytes,
|
||||
eb->len, fs_info->dirty_metadata_batch);
|
||||
|
||||
/*
|
||||
* If writeback for a btree extent that doesn't belong to a log tree
|
||||
* failed, increment the counter transaction->eb_write_errors.
|
||||
|
Loading…
Reference in New Issue
Block a user