xfs
[Top] [All Lists]

[PATCH 11/11] xfs: do not flush data workqueues in xfs_flush_buftarg

To: xfs@xxxxxxxxxxx
Subject: [PATCH 11/11] xfs: do not flush data workqueues in xfs_flush_buftarg
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Mon, 10 Oct 2011 12:52:53 -0400
References: <20111010165242.656850411@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.48-1
When we call xfs_flush_buftarg (generally from sync or umount) it already
is too late to flush the data workqueues, as I/O completion is signalled
for them and we are thus already done with the data we would flush here.

There are places where flushing them might be useful, but the current
sync interface doesn't give us that opportunity.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>

Index: xfs/fs/xfs/xfs_buf.c
===================================================================
--- xfs.orig/fs/xfs/xfs_buf.c   2011-10-10 18:43:04.493870127 +0200
+++ xfs/fs/xfs/xfs_buf.c        2011-10-10 18:43:20.552427959 +0200
@@ -1623,13 +1623,6 @@ xfs_buf_delwri_promote(
        spin_unlock(&btp->bt_delwri_lock);
 }
 
-STATIC void
-xfs_buf_runall_queues(
-       struct workqueue_struct *queue)
-{
-       flush_workqueue(queue);
-}
-
 /*
  * Move as many buffers as specified to the supplied list
  * idicating if we skipped any buffers to prevent deadlocks.
@@ -1752,9 +1745,7 @@ xfs_flush_buftarg(
        LIST_HEAD(wait_list);
        struct blk_plug plug;
 
-       xfs_buf_runall_queues(xfsconvertd_workqueue);
-       xfs_buf_runall_queues(xfsdatad_workqueue);
-       xfs_buf_runall_queues(xfslogd_workqueue);
+       flush_workqueue(xfslogd_workqueue);
 
        set_bit(XBT_FORCE_FLUSH, &target->bt_flags);
        pincount = xfs_buf_delwri_split(target, &tmp_list, 0);

<Prev in Thread] Current Thread [Next in Thread>