Commit 04e568a3 authored by Jan Kara's avatar Jan Kara Committed by Theodore Ts'o
Browse files

ext4: handle redirtying in ext4_bio_write_page()



Since we want to transition transaction commits to use ext4_writepages()
for writing back ordered, add handling of page redirtying into
ext4_bio_write_page(). Also move buffer dirty bit clearing into the same
place other buffer state handling.

Reviewed-by: default avatarRitesh Harjani (IBM) <ritesh.list@gmail.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20221207112722.22220-1-jack@suse.cz


Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 5c099c4f
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -482,6 +482,13 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
			/* A hole? We can safely clear the dirty bit */
			if (!buffer_mapped(bh))
				clear_buffer_dirty(bh);
			/*
			 * Keeping dirty some buffer we cannot write? Make
			 * sure to redirty the page. This happens e.g. when
			 * doing writeout for transaction commit.
			 */
			if (buffer_dirty(bh) && !PageDirty(page))
				redirty_page_for_writepage(wbc, page);
			if (io->io_bio)
				ext4_io_submit(io);
			continue;
@@ -489,6 +496,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
		if (buffer_new(bh))
			clear_buffer_new(bh);
		set_buffer_async_write(bh);
		clear_buffer_dirty(bh);
		nr_to_submit++;
	} while ((bh = bh->b_this_page) != head);

@@ -532,7 +540,10 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
			printk_ratelimited(KERN_ERR "%s: ret = %d\n", __func__, ret);
			redirty_page_for_writepage(wbc, page);
			do {
				if (buffer_async_write(bh)) {
					clear_buffer_async_write(bh);
					set_buffer_dirty(bh);
				}
				bh = bh->b_this_page;
			} while (bh != head);
			goto unlock;
@@ -546,7 +557,6 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
		io_submit_add_bh(io, inode,
				 bounce_page ? bounce_page : page, bh);
		nr_submitted++;
		clear_buffer_dirty(bh);
	} while ((bh = bh->b_this_page) != head);

unlock: