Commit ce62003f authored by Liu Bo's avatar Liu Bo Committed by Chris Mason

Btrfs: fix compressed write corruption on enospc

When failing to allocate space for the whole compressed extent, we'll
fallback to uncompressed IO, but we've forgotten to redirty the pages
which belong to this compressed extent, and these 'clean' pages will
simply skip 'submit' part and go to endio directly, at last we got data
corruption as we write nothing.
Signed-off-by: default avatarLiu Bo <bo.li.liu@oracle.com>
Tested-By: default avatarMartin Steigerwald <martin@lichtvoll.de>
Signed-off-by: default avatarChris Mason <clm@fb.com>
parent f90e579c
...@@ -709,6 +709,18 @@ static noinline int submit_compressed_extents(struct inode *inode, ...@@ -709,6 +709,18 @@ static noinline int submit_compressed_extents(struct inode *inode,
unlock_extent(io_tree, async_extent->start, unlock_extent(io_tree, async_extent->start,
async_extent->start + async_extent->start +
async_extent->ram_size - 1); async_extent->ram_size - 1);
/*
* we need to redirty the pages if we decide to
* fallback to uncompressed IO, otherwise we
* will not submit these pages down to lower
* layers.
*/
extent_range_redirty_for_io(inode,
async_extent->start,
async_extent->start +
async_extent->ram_size - 1);
goto retry; goto retry;
} }
goto out_free; goto out_free;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment