Btrfs: add missing end_page_writeback on submit_extent_page failure
If submit_extent_page() fails in write_one_eb(), we end up with the current page not marked dirty anymore, unlocked and marked for writeback. But we never end up calling end_page_writeback() against the page, which will make calls to filemap_fdatawait_range (e.g. at transaction commit time) hang forever waiting for the writeback bit to be cleared from the page. Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Liu Bo <bo.li.liu@oracle.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
parent
32be3a1ac6
commit
55e3bd2e0c
|
@ -3663,6 +3663,7 @@ static noinline_for_stack int write_one_eb(struct extent_buffer *eb,
|
||||||
if (ret) {
|
if (ret) {
|
||||||
set_bit(EXTENT_BUFFER_IOERR, &eb->bflags);
|
set_bit(EXTENT_BUFFER_IOERR, &eb->bflags);
|
||||||
SetPageError(p);
|
SetPageError(p);
|
||||||
|
end_page_writeback(p);
|
||||||
if (atomic_sub_and_test(num_pages - i, &eb->io_pages))
|
if (atomic_sub_and_test(num_pages - i, &eb->io_pages))
|
||||||
end_extent_buffer_writeback(eb);
|
end_extent_buffer_writeback(eb);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
|
|
Loading…
Reference in New Issue