aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs/xfs_super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/xfs/xfs_super.c')
-rw-r--r--fs/xfs/xfs_super.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 206b97fd1d8a..19cbda196369 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -21,9 +21,7 @@
21#include "xfs_format.h" 21#include "xfs_format.h"
22#include "xfs_log_format.h" 22#include "xfs_log_format.h"
23#include "xfs_trans_resv.h" 23#include "xfs_trans_resv.h"
24#include "xfs_inum.h"
25#include "xfs_sb.h" 24#include "xfs_sb.h"
26#include "xfs_ag.h"
27#include "xfs_mount.h" 25#include "xfs_mount.h"
28#include "xfs_da_format.h" 26#include "xfs_da_format.h"
29#include "xfs_inode.h" 27#include "xfs_inode.h"
@@ -44,7 +42,6 @@
44#include "xfs_icache.h" 42#include "xfs_icache.h"
45#include "xfs_trace.h" 43#include "xfs_trace.h"
46#include "xfs_icreate_item.h" 44#include "xfs_icreate_item.h"
47#include "xfs_dinode.h"
48#include "xfs_filestream.h" 45#include "xfs_filestream.h"
49#include "xfs_quota.h" 46#include "xfs_quota.h"
50#include "xfs_sysfs.h" 47#include "xfs_sysfs.h"
@@ -796,8 +793,7 @@ xfs_open_devices(
796 out_free_ddev_targ: 793 out_free_ddev_targ:
797 xfs_free_buftarg(mp, mp->m_ddev_targp); 794 xfs_free_buftarg(mp, mp->m_ddev_targp);
798 out_close_rtdev: 795 out_close_rtdev:
799 if (rtdev) 796 xfs_blkdev_put(rtdev);
800 xfs_blkdev_put(rtdev);
801 out_close_logdev: 797 out_close_logdev:
802 if (logdev && logdev != ddev) 798 if (logdev && logdev != ddev)
803 xfs_blkdev_put(logdev); 799 xfs_blkdev_put(logdev);
@@ -842,10 +838,15 @@ STATIC int
842xfs_init_mount_workqueues( 838xfs_init_mount_workqueues(
843 struct xfs_mount *mp) 839 struct xfs_mount *mp)
844{ 840{
841 mp->m_buf_workqueue = alloc_workqueue("xfs-buf/%s",
842 WQ_MEM_RECLAIM|WQ_FREEZABLE, 1, mp->m_fsname);
843 if (!mp->m_buf_workqueue)
844 goto out;
845
845 mp->m_data_workqueue = alloc_workqueue("xfs-data/%s", 846 mp->m_data_workqueue = alloc_workqueue("xfs-data/%s",
846 WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname); 847 WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
847 if (!mp->m_data_workqueue) 848 if (!mp->m_data_workqueue)
848 goto out; 849 goto out_destroy_buf;
849 850
850 mp->m_unwritten_workqueue = alloc_workqueue("xfs-conv/%s", 851 mp->m_unwritten_workqueue = alloc_workqueue("xfs-conv/%s",
851 WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname); 852 WQ_MEM_RECLAIM|WQ_FREEZABLE, 0, mp->m_fsname);
@@ -863,7 +864,7 @@ xfs_init_mount_workqueues(
863 goto out_destroy_cil; 864 goto out_destroy_cil;
864 865
865 mp->m_log_workqueue = alloc_workqueue("xfs-log/%s", 866 mp->m_log_workqueue = alloc_workqueue("xfs-log/%s",
866 WQ_FREEZABLE, 0, mp->m_fsname); 867 WQ_FREEZABLE|WQ_HIGHPRI, 0, mp->m_fsname);
867 if (!mp->m_log_workqueue) 868 if (!mp->m_log_workqueue)
868 goto out_destroy_reclaim; 869 goto out_destroy_reclaim;
869 870
@@ -884,6 +885,8 @@ out_destroy_unwritten:
884 destroy_workqueue(mp->m_unwritten_workqueue); 885 destroy_workqueue(mp->m_unwritten_workqueue);
885out_destroy_data_iodone_queue: 886out_destroy_data_iodone_queue:
886 destroy_workqueue(mp->m_data_workqueue); 887 destroy_workqueue(mp->m_data_workqueue);
888out_destroy_buf:
889 destroy_workqueue(mp->m_buf_workqueue);
887out: 890out:
888 return -ENOMEM; 891 return -ENOMEM;
889} 892}
@@ -898,6 +901,7 @@ xfs_destroy_mount_workqueues(
898 destroy_workqueue(mp->m_cil_workqueue); 901 destroy_workqueue(mp->m_cil_workqueue);
899 destroy_workqueue(mp->m_data_workqueue); 902 destroy_workqueue(mp->m_data_workqueue);
900 destroy_workqueue(mp->m_unwritten_workqueue); 903 destroy_workqueue(mp->m_unwritten_workqueue);
904 destroy_workqueue(mp->m_buf_workqueue);
901} 905}
902 906
903/* 907/*
@@ -1000,7 +1004,6 @@ xfs_fs_evict_inode(
1000 clear_inode(inode); 1004 clear_inode(inode);
1001 XFS_STATS_INC(vn_rele); 1005 XFS_STATS_INC(vn_rele);
1002 XFS_STATS_INC(vn_remove); 1006 XFS_STATS_INC(vn_remove);
1003 XFS_STATS_DEC(vn_active);
1004 1007
1005 xfs_inactive(ip); 1008 xfs_inactive(ip);
1006} 1009}