From: Qu Wenruo Date: Mon, 31 May 2021 08:50:51 +0000 (+0800) Subject: btrfs: make btrfs_truncate_block() to be subpage compatible X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=6c9ac8be458152a6316cf28fcd52c7f38f7ec8ec;p=linux.git btrfs: make btrfs_truncate_block() to be subpage compatible btrfs_truncate_block() itself is already mostly subpage compatible, the only missing part is the page dirtying code. Currently if we have a sector that needs to be truncated, we set the sector aligned range delalloc, then set the full page dirty. The problem is, current subpage code requires subpage dirty bit to be set, or __extent_writepage_io() won't submit bio, thus leads to ordered extent never to finish. So this patch will make btrfs_truncate_block() to call btrfs_page_set_dirty() helper to replace set_page_dirty() to fix the problem. Tested-by: Ritesh Harjani # [ppc64] Tested-by: Anand Jain # [aarch64] Signed-off-by: Qu Wenruo Reviewed-by: David Sterba Signed-off-by: David Sterba --- diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 6d905a7b87d03..88838ef22413a 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -4965,7 +4965,7 @@ again: flush_dcache_page(page); } ClearPageChecked(page); - set_page_dirty(page); + btrfs_page_set_dirty(fs_info, page, block_start, block_end + 1 - block_start); unlock_extent_cached(io_tree, block_start, block_end, &cached_state); if (only_release_metadata)