mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 07:33:19 +02:00
gfs2: less aggressive low-memory log flushing
It turns out that for some workloads, the fix in commitb74cd55aa9("gfs2: low-memory forced flush fixes") causes the number of forced log flushes to increase to a degree that the overall filesystem performance drops significantly. Address that by forcing a log flush only when gfs2_writepages cannot make any progress rather than when it cannot make "enough" progress. Fixes:b74cd55aa9("gfs2: low-memory forced flush fixes") Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
bd67f17718
commit
7288185ce8
|
|
@ -158,6 +158,7 @@ static int gfs2_writepages(struct address_space *mapping,
|
|||
struct writeback_control *wbc)
|
||||
{
|
||||
struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
|
||||
long initial_nr_to_write = wbc->nr_to_write;
|
||||
struct iomap_writepage_ctx wpc = {
|
||||
.inode = mapping->host,
|
||||
.wbc = wbc,
|
||||
|
|
@ -166,13 +167,13 @@ static int gfs2_writepages(struct address_space *mapping,
|
|||
int ret;
|
||||
|
||||
/*
|
||||
* Even if we didn't write enough pages here, we might still be holding
|
||||
* Even if we didn't write any pages here, we might still be holding
|
||||
* dirty pages in the ail. We forcibly flush the ail because we don't
|
||||
* want balance_dirty_pages() to loop indefinitely trying to write out
|
||||
* pages held in the ail that it can't find.
|
||||
*/
|
||||
ret = iomap_writepages(&wpc);
|
||||
if (ret == 0 && wbc->nr_to_write > 0)
|
||||
if (ret == 0 && wbc->nr_to_write == initial_nr_to_write)
|
||||
set_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user