From: Filipe Manana Date: Mon, 22 Sep 2014 16:41:04 +0000 (+0100) Subject: Btrfs: add missing end_page_writeback on submit_extent_page failure X-Git-Tag: v3.18-rc1~91^2~14 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=55e3bd2e0c2e1cfb43429b962e61415e0526bc01;p=~emulex%2Finfiniband.git 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 Reviewed-by: Liu Bo Signed-off-by: Chris Mason --- diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 78229007f99..828aded0f8a 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -3663,6 +3663,7 @@ static noinline_for_stack int write_one_eb(struct extent_buffer *eb, if (ret) { set_bit(EXTENT_BUFFER_IOERR, &eb->bflags); SetPageError(p); + end_page_writeback(p); if (atomic_sub_and_test(num_pages - i, &eb->io_pages)) end_extent_buffer_writeback(eb); ret = -EIO;