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

Commit f63e6005 authored by Theodore Ts'o's avatar Theodore Ts'o
Browse files

ext4: Simplify delalloc code by removing mpage_da_writepages()



The mpage_da_writepages() function is only used in one place, so
inline it to simplify the call stack and make the code easier to
understand.

Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent 8dc207c0
Loading
Loading
Loading
Loading
+32 −42
Original line number Diff line number Diff line
@@ -2241,47 +2241,6 @@ static int __mpage_da_writepage(struct page *page,
	return 0;
}

/*
 * mpage_da_writepages - walk the list of dirty pages of the given
 * address space, allocates non-allocated blocks, maps newly-allocated
 * blocks to existing bhs and issue IO them
 *
 * @mapping: address space structure to write
 * @wbc: subtract the number of written pages from *@wbc->nr_to_write
 *
 * This is a library function, which implements the writepages()
 * address_space_operation.
 */
static int mpage_da_writepages(struct address_space *mapping,
			       struct writeback_control *wbc,
			       struct mpage_da_data *mpd)
{
	int ret;

	mpd->b_size = 0;
	mpd->b_state = 0;
	mpd->b_blocknr = 0;
	mpd->first_page = 0;
	mpd->next_page = 0;
	mpd->io_done = 0;
	mpd->pages_written = 0;
	mpd->retval = 0;

	ret = write_cache_pages(mapping, wbc, __mpage_da_writepage, mpd);
	/*
	 * Handle last extent of pages
	 */
	if (!mpd->io_done && mpd->next_page != mpd->first_page) {
		if (mpage_da_map_blocks(mpd) == 0)
			mpage_da_submit_io(mpd);

		mpd->io_done = 1;
		ret = MPAGE_DA_EXTENT_TAIL;
	}
	wbc->nr_to_write -= mpd->pages_written;
	return ret;
}

/*
 * this is a special callback for ->write_begin() only
 * it's intention is to return mapped block or reserve space
@@ -2571,7 +2530,38 @@ retry:
			dump_stack();
			goto out_writepages;
		}
		ret = mpage_da_writepages(mapping, wbc, &mpd);

		/*
		 * Now call __mpage_da_writepage to find the next
		 * contiguous region of logical blocks that need
		 * blocks to be allocated by ext4.  We don't actually
		 * submit the blocks for I/O here, even though
		 * write_cache_pages thinks it will, and will set the
		 * pages as clean for write before calling
		 * __mpage_da_writepage().
		 */
		mpd.b_size = 0;
		mpd.b_state = 0;
		mpd.b_blocknr = 0;
		mpd.first_page = 0;
		mpd.next_page = 0;
		mpd.io_done = 0;
		mpd.pages_written = 0;
		mpd.retval = 0;
		ret = write_cache_pages(mapping, wbc, __mpage_da_writepage,
					&mpd);
		/*
		 * If we have a contigous extent of pages and we
		 * haven't done the I/O yet, map the blocks and submit
		 * them for I/O.
		 */
		if (!mpd.io_done && mpd.next_page != mpd.first_page) {
			if (mpage_da_map_blocks(&mpd) == 0)
				mpage_da_submit_io(&mpd);
			mpd.io_done = 1;
			ret = MPAGE_DA_EXTENT_TAIL;
		}
		wbc->nr_to_write -= mpd.pages_written;

		ext4_journal_stop(handle);