diff options
author | Javier González <javier@cnexlabs.com> | 2017-10-13 08:46:08 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2017-10-13 10:34:57 -0400 |
commit | 0d880398cb6254ab3e110e2a8a659da65a56ffee (patch) | |
tree | 226aacdbbef55ec17523569a30bc4e3f426e4e5b /drivers/lightnvm/pblk-init.c | |
parent | b84ae4a8b883b96b95fff0e3979ff2c65bbf96b0 (diff) |
lightnvm: pblk: decouple read/erase mempools
Since read and erase paths offer different guarantees for inflight I/Os,
separate the mempools to set the right min_nr for each on creation.
Reported-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <m@bjorling.me>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk-init.c')
-rw-r--r-- | drivers/lightnvm/pblk-init.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index 340552253580..2f8d3f9ffbaf 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c | |||
@@ -261,15 +261,20 @@ static int pblk_core_init(struct pblk *pblk) | |||
261 | if (!pblk->rec_pool) | 261 | if (!pblk->rec_pool) |
262 | goto free_gen_ws_pool; | 262 | goto free_gen_ws_pool; |
263 | 263 | ||
264 | pblk->g_rq_pool = mempool_create_slab_pool(PBLK_READ_REQ_POOL_SIZE, | 264 | pblk->r_rq_pool = mempool_create_slab_pool(geo->nr_luns, |
265 | pblk_g_rq_cache); | 265 | pblk_g_rq_cache); |
266 | if (!pblk->g_rq_pool) | 266 | if (!pblk->r_rq_pool) |
267 | goto free_rec_pool; | 267 | goto free_rec_pool; |
268 | 268 | ||
269 | pblk->w_rq_pool = mempool_create_slab_pool(geo->nr_luns * 2, | 269 | pblk->e_rq_pool = mempool_create_slab_pool(geo->nr_luns, |
270 | pblk_g_rq_cache); | ||
271 | if (!pblk->e_rq_pool) | ||
272 | goto free_r_rq_pool; | ||
273 | |||
274 | pblk->w_rq_pool = mempool_create_slab_pool(geo->nr_luns, | ||
270 | pblk_w_rq_cache); | 275 | pblk_w_rq_cache); |
271 | if (!pblk->w_rq_pool) | 276 | if (!pblk->w_rq_pool) |
272 | goto free_g_rq_pool; | 277 | goto free_e_rq_pool; |
273 | 278 | ||
274 | pblk->line_meta_pool = | 279 | pblk->line_meta_pool = |
275 | mempool_create_slab_pool(PBLK_META_POOL_SIZE, | 280 | mempool_create_slab_pool(PBLK_META_POOL_SIZE, |
@@ -304,8 +309,10 @@ free_line_meta_pool: | |||
304 | mempool_destroy(pblk->line_meta_pool); | 309 | mempool_destroy(pblk->line_meta_pool); |
305 | free_w_rq_pool: | 310 | free_w_rq_pool: |
306 | mempool_destroy(pblk->w_rq_pool); | 311 | mempool_destroy(pblk->w_rq_pool); |
307 | free_g_rq_pool: | 312 | free_e_rq_pool: |
308 | mempool_destroy(pblk->g_rq_pool); | 313 | mempool_destroy(pblk->e_rq_pool); |
314 | free_r_rq_pool: | ||
315 | mempool_destroy(pblk->r_rq_pool); | ||
309 | free_rec_pool: | 316 | free_rec_pool: |
310 | mempool_destroy(pblk->rec_pool); | 317 | mempool_destroy(pblk->rec_pool); |
311 | free_gen_ws_pool: | 318 | free_gen_ws_pool: |
@@ -326,7 +333,8 @@ static void pblk_core_free(struct pblk *pblk) | |||
326 | mempool_destroy(pblk->page_bio_pool); | 333 | mempool_destroy(pblk->page_bio_pool); |
327 | mempool_destroy(pblk->gen_ws_pool); | 334 | mempool_destroy(pblk->gen_ws_pool); |
328 | mempool_destroy(pblk->rec_pool); | 335 | mempool_destroy(pblk->rec_pool); |
329 | mempool_destroy(pblk->g_rq_pool); | 336 | mempool_destroy(pblk->r_rq_pool); |
337 | mempool_destroy(pblk->e_rq_pool); | ||
330 | mempool_destroy(pblk->w_rq_pool); | 338 | mempool_destroy(pblk->w_rq_pool); |
331 | mempool_destroy(pblk->line_meta_pool); | 339 | mempool_destroy(pblk->line_meta_pool); |
332 | 340 | ||