gfs2: Trim the ordered write list in gfs2_ordered_write()
authorAbhi Das <adas@redhat.com>
Fri, 22 Dec 2017 13:55:31 +0000 (07:55 -0600)
committerBob Peterson <rpeterso@redhat.com>
Fri, 22 Dec 2017 13:55:31 +0000 (07:55 -0600)
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 <adas@redhat.com>
Acked-by: Steven Whitehouse <swhiteho@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
fs/gfs2/log.c

index 27e97d3de1e0d1789081af0e58f1d44c5c0faedb..b9889ae5fd7cca048daec3bc00b0a5927e81dcae 100644 (file)
@@ -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);