static DEFINE_IDA(index_ida);
 static DEFINE_MUTEX(sess_lock);
 static LIST_HEAD(sess_list);
+static struct workqueue_struct *rnbd_clt_wq;
 
 /*
  * Maximum number of partitions an instance can have.
                         * procedure takes minutes.
                         */
                        INIT_WORK(&dev->unmap_on_rmmod_work, unmap_device_work);
-                       queue_work(system_long_wq, &dev->unmap_on_rmmod_work);
+                       queue_work(rnbd_clt_wq, &dev->unmap_on_rmmod_work);
                }
                rnbd_clt_put_sess(sess);
        }
        /* Wait for all scheduled unmap works */
-       flush_workqueue(system_long_wq);
+       flush_workqueue(rnbd_clt_wq);
        WARN_ON(!list_empty(&sess_list));
 }
 
                pr_err("Failed to load module, creating sysfs device files failed, err: %d\n",
                       err);
                unregister_blkdev(rnbd_client_major, "rnbd");
+               return err;
+       }
+       rnbd_clt_wq = alloc_workqueue("rnbd_clt_wq", 0, 0);
+       if (!rnbd_clt_wq) {
+               pr_err("Failed to load module, alloc_workqueue failed.\n");
+               rnbd_clt_destroy_sysfs_files();
+               unregister_blkdev(rnbd_client_major, "rnbd");
+               err = -ENOMEM;
        }
 
        return err;
        rnbd_destroy_sessions();
        unregister_blkdev(rnbd_client_major, "rnbd");
        ida_destroy(&index_ida);
+       destroy_workqueue(rnbd_clt_wq);
 }
 
 module_init(rnbd_client_init);