btrfs: subpage: make end_compressed_bio_writeback() compatible
In end_compressed_writeback() we just clear the full page writeback. For subpage case, if there are two delalloc ranges in the same page, the 2nd range will trigger a BUG_ON() as the page writeback is already cleared by previous range. Fix it by using btrfs_page_clamp_clear_writeback() helper. Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
bbbff01a47
commit
741ec653ab
|
@ -334,6 +334,7 @@ out:
|
|||
static noinline void end_compressed_writeback(struct inode *inode,
|
||||
const struct compressed_bio *cb)
|
||||
{
|
||||
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
|
||||
unsigned long index = cb->start >> PAGE_SHIFT;
|
||||
unsigned long end_index = (cb->start + cb->len - 1) >> PAGE_SHIFT;
|
||||
struct page *pages[16];
|
||||
|
@ -356,7 +357,8 @@ static noinline void end_compressed_writeback(struct inode *inode,
|
|||
for (i = 0; i < ret; i++) {
|
||||
if (cb->errors)
|
||||
SetPageError(pages[i]);
|
||||
end_page_writeback(pages[i]);
|
||||
btrfs_page_clamp_clear_writeback(fs_info, pages[i],
|
||||
cb->start, cb->len);
|
||||
put_page(pages[i]);
|
||||
}
|
||||
nr_pages -= ret;
|
||||
|
|
Loading…
Reference in New Issue