[Cluster-devel] [GFS2 PATCH 2/2] GFS2: Submit all ordered writes in bulk, wait after that

Andreas Gruenbacher agruenba at redhat.com
Tue May 15 20:31:10 UTC 2018


Hi Bob,

On 14 May 2018 at 16:18, Bob Peterson <rpeterso at redhat.com> wrote:
> Before this patch, the ordered_write function would submit all
> the ordered writes with filemap_fdatawrite, which waited for each
> one to complete before moving on to the next. This patch allows it
> to submit them all, then wait for them after they're submitted.

this looks reasonable.  I think it's not very helpful to reuse
gfs2_ordered_wait here though: the folowing incremental patch should
work just as well or better.

Andreas

---
 fs/gfs2/log.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index b05d0fbc3d05..2a9b1c008325 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -577,12 +577,15 @@ static void gfs2_ordered_write(struct gfs2_sbd *sdp)
 			continue;
 		}
 		list_move_tail(&ip->i_ordered, &written);
-		spin_unlock(&sdp->sd_ordered_lock);
-		mapping->a_ops->writepages(mapping, &wbc);
-		spin_lock(&sdp->sd_ordered_lock);
 	}
 	spin_unlock(&sdp->sd_ordered_lock);
-	gfs2_ordered_wait(sdp, &written, &sdp->sd_log_le_ordered);
+	list_for_each_entry(ip, &written, i_ordered)
+		mapping->a_ops->writepages(ip->i_inode.i_mapping, &wbc);
+	list_for_each_entry(ip, &written, i_ordered)
+		filemap_fdatawait(ip->i_inode.i_mapping);
+	spin_lock(&sdp->sd_ordered_lock);
+	list_splice_tail(&written, &sdp->sd_log_le_ordered);
+	spin_unlock(&sdp->sd_ordered_lock);
 }
 
 void gfs2_ordered_del_inode(struct gfs2_inode *ip)
-- 
2.17.0




More information about the Cluster-devel mailing list