[PATCH RFC v3 2/2] xfs: split metadata and log buffer completion to separate workqueues
Brian Foster
bfoster at redhat.com
Thu Nov 13 13:24:01 CST 2014
XFS traditionally sends all buffer I/O completion work to a single
queue. This includes metadata buffer completion and log buffer
completion. The log buffer completion requires a high priority queue to
prevent stalls due to log forces getting stuck behind other queued work.
Rather than continue to prioritize all buffer I/O completion due to the
needs of log completion, split log buffer completion off to
m_log_workqueue and move the high priority flag from m_buf_workqueue to
m_log_workqueue.
[XXX: Use of XBF_SYNCIO is purely for demonstration. Define a new flag.]
Signed-off-by: Brian Foster <bfoster at redhat.com>
---
fs/xfs/xfs_buf.c | 9 ++++++++-
fs/xfs/xfs_super.c | 5 ++---
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index c06d790..58d729c 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -1050,8 +1050,15 @@ void
xfs_buf_ioend_async(
struct xfs_buf *bp)
{
+ struct workqueue_struct *wq;
+
+ if (bp->b_flags & XBF_SYNCIO)
+ wq = bp->b_target->bt_mount->m_log_workqueue;
+ else
+ wq = bp->b_target->bt_mount->m_buf_workqueue;
+
INIT_WORK(&bp->b_iodone_work, xfs_buf_ioend_work);
- queue_work(bp->b_target->bt_mount->m_buf_workqueue, &bp->b_iodone_work);
+ queue_work(wq, &bp->b_iodone_work);
}
void
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 03e3cc2..4b8cd37 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -843,8 +843,7 @@ xfs_init_mount_workqueues(
struct xfs_mount *mp)
{
mp->m_buf_workqueue = alloc_workqueue("xfs-buf/%s",
- WQ_MEM_RECLAIM|WQ_HIGHPRI|WQ_FREEZABLE, 1,
- mp->m_fsname);
+ WQ_MEM_RECLAIM|WQ_FREEZABLE, 1, mp->m_fsname);
if (!mp->m_buf_workqueue)
goto out;
@@ -869,7 +868,7 @@ xfs_init_mount_workqueues(
goto out_destroy_cil;
mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
- WQ_FREEZABLE, 0, mp->m_fsname);
+ WQ_FREEZABLE|WQ_HIGHPRI, 0, mp->m_fsname);
if (!mp->m_log_workqueue)
goto out_destroy_reclaim;
--
1.8.3.1
More information about the xfs
mailing list