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

Commit 5ac048bb authored by Steven Whitehouse's avatar Steven Whitehouse
Browse files

GFS2: Use filemap_fdatawrite() to write back the AIL



In order to ensure that the mapping stats (and thus the bdi) are correctly
updated, this patch changes the AIL writeback to use the filemap_datawrite
function. This helps prevent stalls in balance_dirty_pages() due to
large amounts of dirty metadata when there is little or no dirty data
around.

Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent 1027efaa
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -91,6 +91,7 @@ static void gfs2_ail1_start_one(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
__releases(&sdp->sd_ail_lock)
__acquires(&sdp->sd_ail_lock)
{
	struct gfs2_glock *gl = NULL;
	struct gfs2_bufdata *bd, *s;
	struct buffer_head *bh;
	int retry;
@@ -113,19 +114,13 @@ __acquires(&sdp->sd_ail_lock)

			if (!buffer_dirty(bh))
				continue;

			if (gl == bd->bd_gl)
				continue;
			gl = bd->bd_gl;
			list_move(&bd->bd_ail_st_list, &ai->ai_ail1_list);

			get_bh(bh);
			spin_unlock(&sdp->sd_ail_lock);
			lock_buffer(bh);
			if (test_clear_buffer_dirty(bh)) {
				bh->b_end_io = end_buffer_write_sync;
				submit_bh(WRITE_SYNC, bh);
			} else {
				unlock_buffer(bh);
				brelse(bh);
			}
			filemap_fdatawrite(gfs2_glock2aspace(gl));
			spin_lock(&sdp->sd_ail_lock);

			retry = 1;