Skip to content

Commit 084ec9b

Browse files
Javier Gonzálezaxboe
authored andcommitted
lightnvm: pblk: rename read request pool
Read requests allocate some extra memory to store its per I/O context. Instead of requiring yet another memory pool for other type of requests, generalize this context allocation (and change naming accordingly). Signed-off-by: Javier González <[email protected]> Signed-off-by: Matias Bjørling <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent d624f37 commit 084ec9b

File tree

5 files changed

+38
-37
lines changed

5 files changed

+38
-37
lines changed

drivers/lightnvm/pblk-core.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ static void pblk_end_io_erase(struct nvm_rq *rqd)
6262
struct pblk *pblk = rqd->private;
6363

6464
__pblk_end_io_erase(pblk, rqd);
65-
mempool_free(rqd, pblk->r_rq_pool);
65+
mempool_free(rqd, pblk->g_rq_pool);
6666
}
6767

6868
static void __pblk_map_invalidate(struct pblk *pblk, struct pblk_line *line,
@@ -171,8 +171,8 @@ struct nvm_rq *pblk_alloc_rqd(struct pblk *pblk, int rw)
171171
pool = pblk->w_rq_pool;
172172
rq_size = pblk_w_rq_size;
173173
} else {
174-
pool = pblk->r_rq_pool;
175-
rq_size = pblk_r_rq_size;
174+
pool = pblk->g_rq_pool;
175+
rq_size = pblk_g_rq_size;
176176
}
177177

178178
rqd = mempool_alloc(pool, GFP_KERNEL);
@@ -188,7 +188,7 @@ void pblk_free_rqd(struct pblk *pblk, struct nvm_rq *rqd, int rw)
188188
if (rw == WRITE)
189189
pool = pblk->w_rq_pool;
190190
else
191-
pool = pblk->r_rq_pool;
191+
pool = pblk->g_rq_pool;
192192

193193
mempool_free(rqd, pool);
194194
}
@@ -1343,8 +1343,8 @@ int pblk_blk_erase_async(struct pblk *pblk, struct ppa_addr ppa)
13431343
struct nvm_rq *rqd;
13441344
int err;
13451345

1346-
rqd = mempool_alloc(pblk->r_rq_pool, GFP_KERNEL);
1347-
memset(rqd, 0, pblk_r_rq_size);
1346+
rqd = mempool_alloc(pblk->g_rq_pool, GFP_KERNEL);
1347+
memset(rqd, 0, pblk_g_rq_size);
13481348

13491349
pblk_setup_e_rq(pblk, rqd, ppa);
13501350

drivers/lightnvm/pblk-init.c

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
#include "pblk.h"
2222

23-
static struct kmem_cache *pblk_blk_ws_cache, *pblk_rec_cache, *pblk_r_rq_cache,
24-
*pblk_w_rq_cache, *pblk_line_meta_cache;
23+
static struct kmem_cache *pblk_blk_ws_cache, *pblk_rec_cache, *pblk_g_rq_cache,
24+
*pblk_w_rq_cache, *pblk_line_meta_cache;
2525
static DECLARE_RWSEM(pblk_lock);
2626
struct bio_set *pblk_bio_set;
2727

@@ -200,9 +200,9 @@ static int pblk_init_global_caches(struct pblk *pblk)
200200
return -ENOMEM;
201201
}
202202

203-
pblk_r_rq_cache = kmem_cache_create("pblk_r_rq", pblk_r_rq_size,
203+
pblk_g_rq_cache = kmem_cache_create("pblk_g_rq", pblk_g_rq_size,
204204
0, 0, NULL);
205-
if (!pblk_r_rq_cache) {
205+
if (!pblk_g_rq_cache) {
206206
kmem_cache_destroy(pblk_blk_ws_cache);
207207
kmem_cache_destroy(pblk_rec_cache);
208208
up_write(&pblk_lock);
@@ -214,7 +214,7 @@ static int pblk_init_global_caches(struct pblk *pblk)
214214
if (!pblk_w_rq_cache) {
215215
kmem_cache_destroy(pblk_blk_ws_cache);
216216
kmem_cache_destroy(pblk_rec_cache);
217-
kmem_cache_destroy(pblk_r_rq_cache);
217+
kmem_cache_destroy(pblk_g_rq_cache);
218218
up_write(&pblk_lock);
219219
return -ENOMEM;
220220
}
@@ -226,7 +226,7 @@ static int pblk_init_global_caches(struct pblk *pblk)
226226
if (!pblk_line_meta_cache) {
227227
kmem_cache_destroy(pblk_blk_ws_cache);
228228
kmem_cache_destroy(pblk_rec_cache);
229-
kmem_cache_destroy(pblk_r_rq_cache);
229+
kmem_cache_destroy(pblk_g_rq_cache);
230230
kmem_cache_destroy(pblk_w_rq_cache);
231231
up_write(&pblk_lock);
232232
return -ENOMEM;
@@ -279,13 +279,13 @@ static int pblk_core_init(struct pblk *pblk)
279279
if (!pblk->rec_pool)
280280
goto free_blk_ws_pool;
281281

282-
pblk->r_rq_pool = mempool_create_slab_pool(64, pblk_r_rq_cache);
283-
if (!pblk->r_rq_pool)
282+
pblk->g_rq_pool = mempool_create_slab_pool(64, pblk_g_rq_cache);
283+
if (!pblk->g_rq_pool)
284284
goto free_rec_pool;
285285

286286
pblk->w_rq_pool = mempool_create_slab_pool(64, pblk_w_rq_cache);
287287
if (!pblk->w_rq_pool)
288-
goto free_r_rq_pool;
288+
goto free_g_rq_pool;
289289

290290
pblk->line_meta_pool =
291291
mempool_create_slab_pool(16, pblk_line_meta_cache);
@@ -312,8 +312,8 @@ static int pblk_core_init(struct pblk *pblk)
312312
mempool_destroy(pblk->line_meta_pool);
313313
free_w_rq_pool:
314314
mempool_destroy(pblk->w_rq_pool);
315-
free_r_rq_pool:
316-
mempool_destroy(pblk->r_rq_pool);
315+
free_g_rq_pool:
316+
mempool_destroy(pblk->g_rq_pool);
317317
free_rec_pool:
318318
mempool_destroy(pblk->rec_pool);
319319
free_blk_ws_pool:
@@ -331,13 +331,13 @@ static void pblk_core_free(struct pblk *pblk)
331331
mempool_destroy(pblk->page_pool);
332332
mempool_destroy(pblk->line_ws_pool);
333333
mempool_destroy(pblk->rec_pool);
334-
mempool_destroy(pblk->r_rq_pool);
334+
mempool_destroy(pblk->g_rq_pool);
335335
mempool_destroy(pblk->w_rq_pool);
336336
mempool_destroy(pblk->line_meta_pool);
337337

338338
kmem_cache_destroy(pblk_blk_ws_cache);
339339
kmem_cache_destroy(pblk_rec_cache);
340-
kmem_cache_destroy(pblk_r_rq_cache);
340+
kmem_cache_destroy(pblk_g_rq_cache);
341341
kmem_cache_destroy(pblk_w_rq_cache);
342342
kmem_cache_destroy(pblk_line_meta_cache);
343343
}

drivers/lightnvm/pblk-read.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ static void pblk_end_io_read(struct nvm_rq *rqd)
110110
{
111111
struct pblk *pblk = rqd->private;
112112
struct nvm_tgt_dev *dev = pblk->dev;
113-
struct pblk_r_ctx *r_ctx = nvm_rq_to_pdu(rqd);
113+
struct pblk_g_ctx *r_ctx = nvm_rq_to_pdu(rqd);
114114
struct bio *bio = rqd->bio;
115115

116116
if (rqd->error)
@@ -124,13 +124,14 @@ static void pblk_end_io_read(struct nvm_rq *rqd)
124124
nvm_dev_dma_free(dev->parent, rqd->ppa_list, rqd->dma_ppa_list);
125125

126126
bio_put(bio);
127-
if (r_ctx->orig_bio) {
127+
if (r_ctx->private) {
128+
struct bio *orig_bio = r_ctx->private;
129+
128130
#ifdef CONFIG_NVM_DEBUG
129-
WARN_ONCE(r_ctx->orig_bio->bi_status,
130-
"pblk: corrupted read bio\n");
131+
WARN_ONCE(orig_bio->bi_status, "pblk: corrupted read bio\n");
131132
#endif
132-
bio_endio(r_ctx->orig_bio);
133-
bio_put(r_ctx->orig_bio);
133+
bio_endio(orig_bio);
134+
bio_put(orig_bio);
134135
}
135136

136137
#ifdef CONFIG_NVM_DEBUG
@@ -345,7 +346,7 @@ int pblk_submit_read(struct pblk *pblk, struct bio *bio)
345346
/* All sectors are to be read from the device */
346347
if (bitmap_empty(&read_bitmap, rqd->nr_ppas)) {
347348
struct bio *int_bio = NULL;
348-
struct pblk_r_ctx *r_ctx = nvm_rq_to_pdu(rqd);
349+
struct pblk_g_ctx *r_ctx = nvm_rq_to_pdu(rqd);
349350

350351
/* Clone read bio to deal with read errors internally */
351352
int_bio = bio_clone_fast(bio, GFP_KERNEL, pblk_bio_set);
@@ -355,7 +356,7 @@ int pblk_submit_read(struct pblk *pblk, struct bio *bio)
355356
}
356357

357358
rqd->bio = int_bio;
358-
r_ctx->orig_bio = bio;
359+
r_ctx->private = bio;
359360

360361
ret = pblk_submit_read_io(pblk, rqd);
361362
if (ret) {

drivers/lightnvm/pblk-recovery.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ static int pblk_recov_read_oob(struct pblk *pblk, struct pblk_line *line,
240240
r_ptr_int = r_ptr;
241241

242242
next_read_rq:
243-
memset(rqd, 0, pblk_r_rq_size);
243+
memset(rqd, 0, pblk_g_rq_size);
244244

245245
rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
246246
if (!rq_ppas)
@@ -361,7 +361,7 @@ static int pblk_recov_pad_oob(struct pblk *pblk, struct pblk_line *line,
361361
bio->bi_iter.bi_sector = 0; /* internal bio */
362362
bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
363363

364-
memset(rqd, 0, pblk_r_rq_size);
364+
memset(rqd, 0, pblk_g_rq_size);
365365

366366
rqd->bio = bio;
367367
rqd->opcode = NVM_OP_PWRITE;
@@ -456,7 +456,7 @@ static int pblk_recov_scan_all_oob(struct pblk *pblk, struct pblk_line *line,
456456
rec_round = 0;
457457

458458
next_rq:
459-
memset(rqd, 0, pblk_r_rq_size);
459+
memset(rqd, 0, pblk_g_rq_size);
460460

461461
rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
462462
if (!rq_ppas)
@@ -591,7 +591,7 @@ static int pblk_recov_scan_oob(struct pblk *pblk, struct pblk_line *line,
591591
*done = 1;
592592

593593
next_rq:
594-
memset(rqd, 0, pblk_r_rq_size);
594+
memset(rqd, 0, pblk_g_rq_size);
595595

596596
rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
597597
if (!rq_ppas)

drivers/lightnvm/pblk.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ struct pblk_sec_meta {
9191

9292
#define pblk_dma_meta_size (sizeof(struct pblk_sec_meta) * PBLK_MAX_REQ_ADDRS)
9393

94-
/* write completion context */
94+
/* write buffer completion context */
9595
struct pblk_c_ctx {
9696
struct list_head list; /* Head for out-of-order completion */
9797

@@ -101,9 +101,9 @@ struct pblk_c_ctx {
101101
unsigned int nr_padded;
102102
};
103103

104-
/* Read context */
105-
struct pblk_r_ctx {
106-
struct bio *orig_bio;
104+
/* generic context */
105+
struct pblk_g_ctx {
106+
void *private;
107107
};
108108

109109
/* Recovery context */
@@ -543,7 +543,7 @@ struct pblk {
543543
mempool_t *page_pool;
544544
mempool_t *line_ws_pool;
545545
mempool_t *rec_pool;
546-
mempool_t *r_rq_pool;
546+
mempool_t *g_rq_pool;
547547
mempool_t *w_rq_pool;
548548
mempool_t *line_meta_pool;
549549

@@ -560,7 +560,7 @@ struct pblk_line_ws {
560560
struct work_struct ws;
561561
};
562562

563-
#define pblk_r_rq_size (sizeof(struct nvm_rq) + sizeof(struct pblk_r_ctx))
563+
#define pblk_g_rq_size (sizeof(struct nvm_rq) + sizeof(struct pblk_g_ctx))
564564
#define pblk_w_rq_size (sizeof(struct nvm_rq) + sizeof(struct pblk_c_ctx))
565565

566566
/*

0 commit comments

Comments
 (0)