From: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> While trying to release a page, the extent containing the page may be locked which would stop the page from being released. Wait for the extent lock to be cleared, if blocking is allowed and then clear the bits. This is avoid warnings coming iomap->dio_rw() -> invalidate_inode_pages2_range() -> invalidate_complete_page2() -> try_to_release_page() results in stale pagecache warning. Signed-off-by: Goldwyn Rodrigues <rgoldwyn@xxxxxxxx> --- fs/btrfs/extent_io.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index cceaf05aada2..57b37463da48 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4370,8 +4370,14 @@ static int try_release_extent_state(struct extent_io_tree *tree, int ret = 1; if (test_range_bit(tree, start, end, EXTENT_LOCKED, 0, NULL)) { - ret = 0; + if (gfpflags_allow_blocking(mask)) { + wait_extent_bit(tree, start, end, EXTENT_LOCKED); + goto clear_bits; + } else { + ret = 0; + } } else { +clear_bits: /* * at this point we can safely clear everything except the * locked bit and the nodatasum bit -- 2.16.4