diff options
Diffstat (limited to 'fs/gfs2/main.c')
-rw-r--r-- | fs/gfs2/main.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c index c150298e2d8e..a8d9bcd0e19c 100644 --- a/fs/gfs2/main.c +++ b/fs/gfs2/main.c | |||
@@ -28,6 +28,8 @@ | |||
28 | #include "recovery.h" | 28 | #include "recovery.h" |
29 | #include "dir.h" | 29 | #include "dir.h" |
30 | 30 | ||
31 | struct workqueue_struct *gfs2_control_wq; | ||
32 | |||
31 | static struct shrinker qd_shrinker = { | 33 | static struct shrinker qd_shrinker = { |
32 | .shrink = gfs2_shrink_qd_memory, | 34 | .shrink = gfs2_shrink_qd_memory, |
33 | .seeks = DEFAULT_SEEKS, | 35 | .seeks = DEFAULT_SEEKS, |
@@ -146,12 +148,19 @@ static int __init init_gfs2_fs(void) | |||
146 | if (!gfs_recovery_wq) | 148 | if (!gfs_recovery_wq) |
147 | goto fail_wq; | 149 | goto fail_wq; |
148 | 150 | ||
151 | gfs2_control_wq = alloc_workqueue("gfs2_control", | ||
152 | WQ_NON_REENTRANT | WQ_UNBOUND | WQ_FREEZABLE, 0); | ||
153 | if (!gfs2_control_wq) | ||
154 | goto fail_control; | ||
155 | |||
149 | gfs2_register_debugfs(); | 156 | gfs2_register_debugfs(); |
150 | 157 | ||
151 | printk("GFS2 installed\n"); | 158 | printk("GFS2 installed\n"); |
152 | 159 | ||
153 | return 0; | 160 | return 0; |
154 | 161 | ||
162 | fail_control: | ||
163 | destroy_workqueue(gfs_recovery_wq); | ||
155 | fail_wq: | 164 | fail_wq: |
156 | unregister_filesystem(&gfs2meta_fs_type); | 165 | unregister_filesystem(&gfs2meta_fs_type); |
157 | fail_unregister: | 166 | fail_unregister: |
@@ -195,6 +204,7 @@ static void __exit exit_gfs2_fs(void) | |||
195 | unregister_filesystem(&gfs2_fs_type); | 204 | unregister_filesystem(&gfs2_fs_type); |
196 | unregister_filesystem(&gfs2meta_fs_type); | 205 | unregister_filesystem(&gfs2meta_fs_type); |
197 | destroy_workqueue(gfs_recovery_wq); | 206 | destroy_workqueue(gfs_recovery_wq); |
207 | destroy_workqueue(gfs2_control_wq); | ||
198 | 208 | ||
199 | rcu_barrier(); | 209 | rcu_barrier(); |
200 | 210 | ||