static int create_work_queues(void) { struct work_queue *util_wq; if (init_work_queue(get_nr_nodes)) return -1; sys->net_wqueue = create_work_queue("net", WQ_UNLIMITED); sys->gateway_wqueue = create_work_queue("gway", WQ_UNLIMITED); sys->io_wqueue = create_work_queue("io", WQ_UNLIMITED); sys->recovery_wqueue = create_work_queue("rw", WQ_UNLIMITED); sys->deletion_wqueue = create_ordered_work_queue("deletion"); sys->block_wqueue = create_ordered_work_queue("block"); sys->md_wqueue = create_ordered_work_queue("md"); sys->areq_wqueue = create_work_queue("async_req", WQ_UNLIMITED); if (sys->enable_object_cache) { sys->oc_reclaim_wqueue = create_ordered_work_queue("oc_reclaim"); sys->oc_push_wqueue = create_work_queue("oc_push", WQ_DYNAMIC); if (!sys->oc_reclaim_wqueue || !sys->oc_push_wqueue) return -1; } if (!sys->gateway_wqueue || !sys->io_wqueue || !sys->recovery_wqueue || !sys->deletion_wqueue || !sys->block_wqueue || !sys->md_wqueue || !sys->areq_wqueue) return -1; util_wq = create_ordered_work_queue("util"); if (!util_wq) return -1; register_util_wq(util_wq); return 0; }
static int create_work_queues(void) { struct work_queue *util_wq; if (init_work_queue(get_nr_nodes)) return -1; if (wq_net_threads) { sd_info("# of threads in net workqueue: %d", wq_net_threads); sys->net_wqueue = create_fixed_work_queue("net", wq_net_threads); } else { sd_info("net workqueue is created as unlimited, it is not recommended!"); sys->net_wqueue = create_work_queue("net", WQ_UNLIMITED); } if (wq_gway_threads) { sd_info("# of threads in gway workqueue: %d", wq_gway_threads); sys->gateway_wqueue = create_fixed_work_queue("gway", wq_gway_threads); } else { sd_info("gway workqueue is created as unlimited, it is not recommended!"); sys->gateway_wqueue = create_work_queue("gway", WQ_UNLIMITED); } if (wq_io_threads) { sd_info("# of threads in io workqueue: %d", wq_io_threads); sys->io_wqueue = create_fixed_work_queue("io", wq_io_threads); } else { sd_info("io workqueue is created as unlimited, it is not recommended!"); sys->io_wqueue = create_work_queue("io", WQ_UNLIMITED); } if (wq_recovery_threads) { sd_info("# of threads in rw workqueue: %d", wq_recovery_threads); sys->recovery_wqueue = create_fixed_work_queue("rw", wq_recovery_threads); } else { sd_info("recovery workqueue is created as unlimited, it is not recommended!"); sys->recovery_wqueue = create_work_queue("rw", WQ_UNLIMITED); } sys->deletion_wqueue = create_ordered_work_queue("deletion"); sys->block_wqueue = create_ordered_work_queue("block"); sys->md_wqueue = create_ordered_work_queue("md"); if (wq_async_threads) { sd_info("# of threads in async_req workqueue: %d", wq_async_threads); sys->areq_wqueue = create_fixed_work_queue("async_req", wq_async_threads); } else { sd_info("async_req workqueue is created as unlimited, it is not recommended!"); sys->areq_wqueue = create_work_queue("async_req", WQ_UNLIMITED); } if (!sys->gateway_wqueue || !sys->io_wqueue || !sys->recovery_wqueue || !sys->deletion_wqueue || !sys->block_wqueue || !sys->md_wqueue || !sys->areq_wqueue) return -1; util_wq = create_ordered_work_queue("util"); if (!util_wq) return -1; register_util_wq(util_wq); return 0; }