aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_super.c
diff options
context:
space:
mode:
authorDave Chinner <dchinner@redhat.com>2012-10-08 06:56:05 -0400
committerBen Myers <bpm@sgi.com>2012-10-17 13:19:27 -0400
commit5889608df35783590251cfd440fa5d48f1855179 (patch)
tree4284177945081868e2756d27ae9706e1cc9ee357 /fs/xfs/xfs_super.c
parent9aa05000f2b7cab4be582afba64af10b2d74727e (diff)
xfs: syncd workqueue is no more
With the syncd functions moved to the log and/or removed, the syncd workqueue is the only remaining bit left. It is used by the log covering/ail pushing work, as well as by the inode reclaim work. Given how cheap workqueues are these days, give the log and inode reclaim work their own work queues and kill the syncd work queue. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ben Myers <bpm@sgi.com>
Diffstat (limited to 'fs/xfs/xfs_super.c')
-rw-r--r--fs/xfs/xfs_super.c38
1 files changed, 18 insertions, 20 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 9468c6878463..27d5a92e1210 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -863,8 +863,23 @@ xfs_init_mount_workqueues(
863 WQ_MEM_RECLAIM, 0, mp->m_fsname); 863 WQ_MEM_RECLAIM, 0, mp->m_fsname);
864 if (!mp->m_cil_workqueue) 864 if (!mp->m_cil_workqueue)
865 goto out_destroy_unwritten; 865 goto out_destroy_unwritten;
866
867 mp->m_reclaim_workqueue = alloc_workqueue("xfs-reclaim/%s",
868 WQ_NON_REENTRANT, 0, mp->m_fsname);
869 if (!mp->m_reclaim_workqueue)
870 goto out_destroy_cil;
871
872 mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
873 WQ_NON_REENTRANT, 0, mp->m_fsname);
874 if (!mp->m_log_workqueue)
875 goto out_destroy_reclaim;
876
866 return 0; 877 return 0;
867 878
879out_destroy_reclaim:
880 destroy_workqueue(mp->m_reclaim_workqueue);
881out_destroy_cil:
882 destroy_workqueue(mp->m_cil_workqueue);
868out_destroy_unwritten: 883out_destroy_unwritten:
869 destroy_workqueue(mp->m_unwritten_workqueue); 884 destroy_workqueue(mp->m_unwritten_workqueue);
870out_destroy_data_iodone_queue: 885out_destroy_data_iodone_queue:
@@ -877,6 +892,8 @@ STATIC void
877xfs_destroy_mount_workqueues( 892xfs_destroy_mount_workqueues(
878 struct xfs_mount *mp) 893 struct xfs_mount *mp)
879{ 894{
895 destroy_workqueue(mp->m_log_workqueue);
896 destroy_workqueue(mp->m_reclaim_workqueue);
880 destroy_workqueue(mp->m_cil_workqueue); 897 destroy_workqueue(mp->m_cil_workqueue);
881 destroy_workqueue(mp->m_data_workqueue); 898 destroy_workqueue(mp->m_data_workqueue);
882 destroy_workqueue(mp->m_unwritten_workqueue); 899 destroy_workqueue(mp->m_unwritten_workqueue);
@@ -1391,10 +1408,6 @@ xfs_fs_fill_super(
1391 /* 1408 /*
1392 * we must configure the block size in the superblock before we run the 1409 * we must configure the block size in the superblock before we run the
1393 * full mount process as the mount process can lookup and cache inodes. 1410 * full mount process as the mount process can lookup and cache inodes.
1394 * For the same reason we must also initialise the syncd and register
1395 * the inode cache shrinker so that inodes can be reclaimed during
1396 * operations like a quotacheck that iterate all inodes in the
1397 * filesystem.
1398 */ 1411 */
1399 sb->s_magic = XFS_SB_MAGIC; 1412 sb->s_magic = XFS_SB_MAGIC;
1400 sb->s_blocksize = mp->m_sb.sb_blocksize; 1413 sb->s_blocksize = mp->m_sb.sb_blocksize;
@@ -1639,16 +1652,6 @@ STATIC int __init
1639xfs_init_workqueues(void) 1652xfs_init_workqueues(void)
1640{ 1653{
1641 /* 1654 /*
1642 * We never want to the same work item to run twice, reclaiming inodes
1643 * or idling the log is not going to get any faster by multiple CPUs
1644 * competing for ressources. Use the default large max_active value
1645 * so that even lots of filesystems can perform these task in parallel.
1646 */
1647 xfs_syncd_wq = alloc_workqueue("xfssyncd", WQ_NON_REENTRANT, 0);
1648 if (!xfs_syncd_wq)
1649 return -ENOMEM;
1650
1651 /*
1652 * The allocation workqueue can be used in memory reclaim situations 1655 * The allocation workqueue can be used in memory reclaim situations
1653 * (writepage path), and parallelism is only limited by the number of 1656 * (writepage path), and parallelism is only limited by the number of
1654 * AGs in all the filesystems mounted. Hence use the default large 1657 * AGs in all the filesystems mounted. Hence use the default large
@@ -1656,20 +1659,15 @@ xfs_init_workqueues(void)
1656 */ 1659 */
1657 xfs_alloc_wq = alloc_workqueue("xfsalloc", WQ_MEM_RECLAIM, 0); 1660 xfs_alloc_wq = alloc_workqueue("xfsalloc", WQ_MEM_RECLAIM, 0);
1658 if (!xfs_alloc_wq) 1661 if (!xfs_alloc_wq)
1659 goto out_destroy_syncd; 1662 return -ENOMEM;
1660 1663
1661 return 0; 1664 return 0;
1662
1663out_destroy_syncd:
1664 destroy_workqueue(xfs_syncd_wq);
1665 return -ENOMEM;
1666} 1665}
1667 1666
1668STATIC void 1667STATIC void
1669xfs_destroy_workqueues(void) 1668xfs_destroy_workqueues(void)
1670{ 1669{
1671 destroy_workqueue(xfs_alloc_wq); 1670 destroy_workqueue(xfs_alloc_wq);
1672 destroy_workqueue(xfs_syncd_wq);
1673} 1671}
1674 1672
1675STATIC int __init 1673STATIC int __init