[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