diff options
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index e8d05a6922f9..6271f85fd165 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c | |||
@@ -251,7 +251,7 @@ static int pblk_core_init(struct pblk *pblk) | |||
251 | if (!pblk->page_pool) | 251 | if (!pblk->page_pool) |
252 | return -ENOMEM; | 252 | return -ENOMEM; |
253 | 253 | ||
254 | pblk->line_ws_pool = mempool_create_slab_pool(geo->nr_luns, | 254 | pblk->line_ws_pool = mempool_create_slab_pool(PBLK_WS_POOL_SIZE, |
255 | pblk_blk_ws_cache); | 255 | pblk_blk_ws_cache); |
256 | if (!pblk->line_ws_pool) | 256 | if (!pblk->line_ws_pool) |
257 | goto free_page_pool; | 257 | goto free_page_pool; |
@@ -260,35 +260,45 @@ static int pblk_core_init(struct pblk *pblk) | |||
260 | if (!pblk->rec_pool) | 260 | if (!pblk->rec_pool) |
261 | goto free_blk_ws_pool; | 261 | goto free_blk_ws_pool; |
262 | 262 | ||
263 | pblk->g_rq_pool = mempool_create_slab_pool(64, pblk_g_rq_cache); | 263 | pblk->g_rq_pool = mempool_create_slab_pool(PBLK_READ_REQ_POOL_SIZE, |
264 | pblk_g_rq_cache); | ||
264 | if (!pblk->g_rq_pool) | 265 | if (!pblk->g_rq_pool) |
265 | goto free_rec_pool; | 266 | goto free_rec_pool; |
266 | 267 | ||
267 | pblk->w_rq_pool = mempool_create_slab_pool(64, pblk_w_rq_cache); | 268 | pblk->w_rq_pool = mempool_create_slab_pool(geo->nr_luns * 2, |
269 | pblk_w_rq_cache); | ||
268 | if (!pblk->w_rq_pool) | 270 | if (!pblk->w_rq_pool) |
269 | goto free_g_rq_pool; | 271 | goto free_g_rq_pool; |
270 | 272 | ||
271 | pblk->line_meta_pool = | 273 | pblk->line_meta_pool = |
272 | mempool_create_slab_pool(16, pblk_line_meta_cache); | 274 | mempool_create_slab_pool(PBLK_META_POOL_SIZE, |
275 | pblk_line_meta_cache); | ||
273 | if (!pblk->line_meta_pool) | 276 | if (!pblk->line_meta_pool) |
274 | goto free_w_rq_pool; | 277 | goto free_w_rq_pool; |
275 | 278 | ||
276 | pblk->kw_wq = alloc_workqueue("pblk-aux-wq", | 279 | pblk->close_wq = alloc_workqueue("pblk-close-wq", |
277 | WQ_MEM_RECLAIM | WQ_UNBOUND, 1); | 280 | WQ_MEM_RECLAIM | WQ_UNBOUND, PBLK_NR_CLOSE_JOBS); |
278 | if (!pblk->kw_wq) | 281 | if (!pblk->close_wq) |
279 | goto free_line_meta_pool; | 282 | goto free_line_meta_pool; |
280 | 283 | ||
284 | pblk->bb_wq = alloc_workqueue("pblk-bb-wq", | ||
285 | WQ_MEM_RECLAIM | WQ_UNBOUND, 0); | ||
286 | if (!pblk->bb_wq) | ||
287 | goto free_close_wq; | ||
288 | |||
281 | if (pblk_set_ppaf(pblk)) | 289 | if (pblk_set_ppaf(pblk)) |
282 | goto free_kw_wq; | 290 | goto free_bb_wq; |
283 | 291 | ||
284 | if (pblk_rwb_init(pblk)) | 292 | if (pblk_rwb_init(pblk)) |
285 | goto free_kw_wq; | 293 | goto free_bb_wq; |
286 | 294 | ||
287 | INIT_LIST_HEAD(&pblk->compl_list); | 295 | INIT_LIST_HEAD(&pblk->compl_list); |
288 | return 0; | 296 | return 0; |
289 | 297 | ||
290 | free_kw_wq: | 298 | free_bb_wq: |
291 | destroy_workqueue(pblk->kw_wq); | 299 | destroy_workqueue(pblk->bb_wq); |
300 | free_close_wq: | ||
301 | destroy_workqueue(pblk->close_wq); | ||
292 | free_line_meta_pool: | 302 | free_line_meta_pool: |
293 | mempool_destroy(pblk->line_meta_pool); | 303 | mempool_destroy(pblk->line_meta_pool); |
294 | free_w_rq_pool: | 304 | free_w_rq_pool: |
@@ -306,8 +316,11 @@ free_page_pool: | |||
306 | 316 | ||
307 | static void pblk_core_free(struct pblk *pblk) | 317 | static void pblk_core_free(struct pblk *pblk) |
308 | { | 318 | { |
309 | if (pblk->kw_wq) | 319 | if (pblk->close_wq) |
310 | destroy_workqueue(pblk->kw_wq); | 320 | destroy_workqueue(pblk->close_wq); |
321 | |||
322 | if (pblk->bb_wq) | ||
323 | destroy_workqueue(pblk->bb_wq); | ||
311 | 324 | ||
312 | mempool_destroy(pblk->page_pool); | 325 | mempool_destroy(pblk->page_pool); |
313 | mempool_destroy(pblk->line_ws_pool); | 326 | mempool_destroy(pblk->line_ws_pool); |