From: Abhi Das Date: Fri, 22 Dec 2017 13:55:31 +0000 (-0600) Subject: gfs2: Trim the ordered write list in gfs2_ordered_write() X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=1f23bc7869fffec40b8bd9333a74a18d1de54d98;p=openwrt%2Fstaging%2Fblogic.git gfs2: Trim the ordered write list in gfs2_ordered_write() We iterate through the entire ordered writes list in gfs2_ordered_write() to write out inodes. It's a good place to try and shrink the list by throwing out inodes that don't have any pages. Signed-off-by: Abhi Das Acked-by: Steven Whitehouse Signed-off-by: Bob Peterson --- diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c index 27e97d3de1e0..b9889ae5fd7c 100644 --- a/fs/gfs2/log.c +++ b/fs/gfs2/log.c @@ -538,9 +538,12 @@ static void gfs2_ordered_write(struct gfs2_sbd *sdp) list_sort(NULL, &sdp->sd_log_le_ordered, &ip_cmp); while (!list_empty(&sdp->sd_log_le_ordered)) { ip = list_entry(sdp->sd_log_le_ordered.next, struct gfs2_inode, i_ordered); - list_move(&ip->i_ordered, &written); - if (ip->i_inode.i_mapping->nrpages == 0) + if (ip->i_inode.i_mapping->nrpages == 0) { + test_and_clear_bit(GIF_ORDERED, &ip->i_flags); + list_del(&ip->i_ordered); continue; + } + list_move(&ip->i_ordered, &written); spin_unlock(&sdp->sd_ordered_lock); filemap_fdatawrite(ip->i_inode.i_mapping); spin_lock(&sdp->sd_ordered_lock);