diff options
author | Abhi Das <adas@redhat.com> | 2017-08-04 12:15:32 -0500 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2017-08-10 10:51:03 -0500 |
commit | b066a4eebd4f5ea77f7e5c7d13104d38e1a1d4bf (patch) | |
tree | b8f53940b11052f2cb444f21586063eed0c1f3e5 /fs/gfs2/incore.h | |
parent | a91323e255fa8bc84b0acf63376b395c534a38fa (diff) | |
download | linux-rpi-b066a4eebd4f5ea77f7e5c7d13104d38e1a1d4bf.tar.gz linux-rpi-b066a4eebd4f5ea77f7e5c7d13104d38e1a1d4bf.tar.bz2 linux-rpi-b066a4eebd4f5ea77f7e5c7d13104d38e1a1d4bf.zip |
gfs2: forcibly flush ail to relieve memory pressure
On systems with low memory, it is possible for gfs2 to infinitely
loop in balance_dirty_pages() under heavy IO (creating sparse files).
balance_dirty_pages() attempts to write out the dirty pages via
gfs2_writepages() but none are found because these dirty pages are
being used by the journaling code in the ail. Normally, the journal
has an upper threshold which when hit triggers an automatic flush
of the ail. But this threshold can be higher than the number of
allowable dirty pages and result in the ail never being flushed.
This patch forces an ail flush when gfs2_writepages() fails to write
anything. This is a good indication that the ail might be holding
some dirty pages.
Signed-off-by: Abhi Das <adas@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2/incore.h')
-rw-r--r-- | fs/gfs2/incore.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 73fce76e67ee..a7b0331c549d 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h @@ -606,6 +606,7 @@ enum { SDF_NOJOURNALID = 6, SDF_RORECOVERY = 7, /* read only recovery */ SDF_SKIP_DLM_UNLOCK = 8, + SDF_FORCE_AIL_FLUSH = 9, }; enum gfs2_freeze_state { |