|
@@ -1219,6 +1219,36 @@ static void nfs_destroy_inodecache(void)
|
|
|
kmem_cache_destroy(nfs_inode_cachep);
|
|
|
}
|
|
|
|
|
|
+struct workqueue_struct *nfsiod_workqueue;
|
|
|
+
|
|
|
+/*
|
|
|
+ * start up the nfsiod workqueue
|
|
|
+ */
|
|
|
+static int nfsiod_start(void)
|
|
|
+{
|
|
|
+ struct workqueue_struct *wq;
|
|
|
+ dprintk("RPC: creating workqueue nfsiod\n");
|
|
|
+ wq = create_singlethread_workqueue("nfsiod");
|
|
|
+ if (wq == NULL)
|
|
|
+ return -ENOMEM;
|
|
|
+ nfsiod_workqueue = wq;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Destroy the nfsiod workqueue
|
|
|
+ */
|
|
|
+static void nfsiod_stop(void)
|
|
|
+{
|
|
|
+ struct workqueue_struct *wq;
|
|
|
+
|
|
|
+ wq = nfsiod_workqueue;
|
|
|
+ if (wq == NULL)
|
|
|
+ return;
|
|
|
+ nfsiod_workqueue = NULL;
|
|
|
+ destroy_workqueue(wq);
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Initialize NFS
|
|
|
*/
|
|
@@ -1226,6 +1256,10 @@ static int __init init_nfs_fs(void)
|
|
|
{
|
|
|
int err;
|
|
|
|
|
|
+ err = nfsiod_start();
|
|
|
+ if (err)
|
|
|
+ goto out6;
|
|
|
+
|
|
|
err = nfs_fs_proc_init();
|
|
|
if (err)
|
|
|
goto out5;
|
|
@@ -1272,6 +1306,8 @@ out3:
|
|
|
out4:
|
|
|
nfs_fs_proc_exit();
|
|
|
out5:
|
|
|
+ nfsiod_stop();
|
|
|
+out6:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
@@ -1287,6 +1323,7 @@ static void __exit exit_nfs_fs(void)
|
|
|
#endif
|
|
|
unregister_nfs_fs();
|
|
|
nfs_fs_proc_exit();
|
|
|
+ nfsiod_stop();
|
|
|
}
|
|
|
|
|
|
/* Not quite true; I just maintain it */
|