This is a RHEL7 patchset to address bz 1511599. The first patch in this series is just an instrumentation patch to assess the impact of the subsequent patches on the ordered write list. It is not intended to be merged into the code base.
The second patch adds a function gfs2_ordered_shrink() which attempts to remove inodes from the ordered list that don't have any pages in need of writing. This function is called from gfs2_sync_fs(). The third patch does a few things: - Call gfs2_ordered_write() in case we didn't trim the ordered write list in gfs2_ordered_shrink(). - Have gfs2_ordered_write() trim the list of inodes that don't have pages that need to be written. Should happen every time on a log flush when gfs2_log_flush() calls gfs2_ordered_write() - Call gfs2_ordered_del_inode() from gfs2_fsync() Other ideas: - Change gfs2_ordered_write() so that it can work on a subset of the ordered list. That way, we can call it to write a percentage (or N inodes), wait for the writes to complete and then remove those inodes from the list. Abhi Das (3): gfs2: ordered list instrumentation gfs2: try to free empty mapping inodes from ordered list gfs2: ordered write list addendum patch fs/gfs2/bmap.c | 2 +- fs/gfs2/file.c | 5 ++++- fs/gfs2/incore.h | 13 +++++++++++++ fs/gfs2/log.c | 36 ++++++++++++++++++++++++++++++++---- fs/gfs2/log.h | 38 ++++++++++++++++++++++++++++++++++++-- fs/gfs2/ops_fstype.c | 1 + fs/gfs2/quota.c | 8 ++++++++ fs/gfs2/super.c | 6 ++++-- 8 files changed, 99 insertions(+), 10 deletions(-) -- 2.4.11