Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d10ee2e authored by Josef Bacik's avatar Josef Bacik Committed by Chris Mason
Browse files

Btrfs: don't call writepages from within write_full_page



When doing a writepage we call writepages to try and write out any other dirty
pages in the area.  This could cause problems where we commit a transaction and
then have somebody else dirtying metadata in the area as we could end up writing
out a lot more than we care about, which could cause latency on anybody who is
waiting for the transaction to completely finish committing.  Thanks,

Signed-off-by: default avatarJosef Bacik <josef@redhat.com>
Signed-off-by: default avatarChris Mason <chris.mason@oracle.com>
parent 341d14f1
Loading
Loading
Loading
Loading
+0 −10
Original line number Original line Diff line number Diff line
@@ -2502,7 +2502,6 @@ int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
			  struct writeback_control *wbc)
			  struct writeback_control *wbc)
{
{
	int ret;
	int ret;
	struct address_space *mapping = page->mapping;
	struct extent_page_data epd = {
	struct extent_page_data epd = {
		.bio = NULL,
		.bio = NULL,
		.tree = tree,
		.tree = tree,
@@ -2510,18 +2509,9 @@ int extent_write_full_page(struct extent_io_tree *tree, struct page *page,
		.extent_locked = 0,
		.extent_locked = 0,
		.sync_io = wbc->sync_mode == WB_SYNC_ALL,
		.sync_io = wbc->sync_mode == WB_SYNC_ALL,
	};
	};
	struct writeback_control wbc_writepages = {
		.sync_mode	= wbc->sync_mode,
		.older_than_this = NULL,
		.nr_to_write	= 64,
		.range_start	= page_offset(page) + PAGE_CACHE_SIZE,
		.range_end	= (loff_t)-1,
	};


	ret = __extent_writepage(page, wbc, &epd);
	ret = __extent_writepage(page, wbc, &epd);


	extent_write_cache_pages(tree, mapping, &wbc_writepages,
				 __extent_writepage, &epd, flush_write_bio);
	flush_epd_write_bio(&epd);
	flush_epd_write_bio(&epd);
	return ret;
	return ret;
}
}