Lines Matching refs:rqd
22 static unsigned long pblk_end_w_bio(struct pblk *pblk, struct nvm_rq *rqd,
53 pblk_bio_free_pages(pblk, rqd->bio, c_ctx->nr_valid,
57 atomic_long_add(rqd->nr_ppas, &pblk->sync_writes);
62 bio_put(rqd->bio);
63 pblk_free_rqd(pblk, rqd, PBLK_WRITE);
69 struct nvm_rq *rqd,
73 return pblk_end_w_bio(pblk, rqd, c_ctx);
76 static void pblk_complete_write(struct pblk *pblk, struct nvm_rq *rqd,
90 pos = pblk_end_w_bio(pblk, rqd, c_ctx);
94 rqd = nvm_rq_from_c_ctx(c);
96 pos = pblk_end_queued_w_bio(pblk, rqd, c);
101 WARN_ON(nvm_rq_from_c_ctx(c_ctx) != rqd);
213 struct nvm_rq *rqd = recovery->rqd;
214 struct pblk_c_ctx *c_ctx = nvm_rq_to_pdu(rqd);
215 struct ppa_addr *ppa_list = nvm_rq_to_ppa_list(rqd);
217 pblk_log_write_err(pblk, rqd);
219 pblk_map_remaining(pblk, ppa_list, rqd->nr_ppas);
224 pblk_bio_free_pages(pblk, rqd->bio, c_ctx->nr_valid,
226 bio_put(rqd->bio);
227 pblk_free_rqd(pblk, rqd, PBLK_WRITE);
235 static void pblk_end_w_fail(struct pblk *pblk, struct nvm_rq *rqd)
246 recovery->rqd = rqd;
252 static void pblk_end_io_write(struct nvm_rq *rqd)
254 struct pblk *pblk = rqd->private;
255 struct pblk_c_ctx *c_ctx = nvm_rq_to_pdu(rqd);
257 if (rqd->error) {
258 pblk_end_w_fail(pblk, rqd);
262 pblk_check_chunk_state_update(pblk, rqd);
264 WARN_ONCE(rqd->bio->bi_status, "pblk: corrupted write error\n");
268 pblk_complete_write(pblk, rqd, c_ctx);
272 static void pblk_end_io_write_meta(struct nvm_rq *rqd)
274 struct pblk *pblk = rqd->private;
275 struct pblk_g_ctx *m_ctx = nvm_rq_to_pdu(rqd);
278 struct ppa_addr *ppa_list = nvm_rq_to_ppa_list(rqd);
283 if (rqd->error) {
284 pblk_log_write_err(pblk, rqd);
289 pblk_check_chunk_state_update(pblk, rqd);
292 sync = atomic_add_return(rqd->nr_ppas, &emeta->sync);
297 pblk_free_rqd(pblk, rqd, PBLK_WRITE_INT);
302 static int pblk_alloc_w_rq(struct pblk *pblk, struct nvm_rq *rqd,
306 rqd->opcode = NVM_OP_PWRITE;
307 rqd->nr_ppas = nr_secs;
308 rqd->is_seq = 1;
309 rqd->private = pblk;
310 rqd->end_io = end_io;
312 return pblk_alloc_rqd_meta(pblk, rqd);
315 static int pblk_setup_w_rq(struct pblk *pblk, struct nvm_rq *rqd,
320 struct pblk_c_ctx *c_ctx = nvm_rq_to_pdu(rqd);
332 ret = pblk_alloc_w_rq(pblk, rqd, nr_secs, pblk_end_io_write);
339 ret = pblk_map_rq(pblk, rqd, c_ctx->sentry, lun_bitmap,
342 ret = pblk_map_erase_rq(pblk, rqd, c_ctx->sentry, lun_bitmap,
376 struct nvm_rq *rqd;
385 rqd = pblk_alloc_rqd(pblk, PBLK_WRITE_INT);
387 m_ctx = nvm_rq_to_pdu(rqd);
393 ret = pblk_alloc_w_rq(pblk, rqd, rq_ppas, pblk_end_io_write_meta);
397 ppa_list = nvm_rq_to_ppa_list(rqd);
398 for (i = 0; i < rqd->nr_ppas; ) {
414 ret = pblk_submit_io(pblk, rqd, data);
429 pblk_free_rqd(pblk, rqd, PBLK_WRITE_INT);
494 static int pblk_submit_io_set(struct pblk *pblk, struct nvm_rq *rqd)
503 err = pblk_setup_w_rq(pblk, rqd, &erase_ppa);
509 meta_line = pblk_should_submit_meta_io(pblk, rqd);
512 err = pblk_submit_io(pblk, rqd, NULL);
545 static void pblk_free_write_rqd(struct pblk *pblk, struct nvm_rq *rqd)
547 struct pblk_c_ctx *c_ctx = nvm_rq_to_pdu(rqd);
548 struct bio *bio = rqd->bio;
558 struct nvm_rq *rqd;
619 rqd = pblk_alloc_rqd(pblk, PBLK_WRITE);
620 rqd->bio = bio;
622 if (pblk_rb_read_to_bio(&pblk->rwb, rqd, pos, secs_to_sync,
628 if (pblk_submit_io_set(pblk, rqd))
639 pblk_free_write_rqd(pblk, rqd);
642 pblk_free_rqd(pblk, rqd, PBLK_WRITE);