summaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/pblk.h
diff options
context:
space:
mode:
authorMatias Bjørling <mb@lightnvm.io>2018-10-09 07:11:36 -0400
committerJens Axboe <axboe@kernel.dk>2018-10-09 10:25:06 -0400
commitaff3fb18f957de93e629c7d3d2c4ef1f360aa511 (patch)
tree9a4d00e5ebdbad312cf5dc4ce3379097010ecb03 /drivers/lightnvm/pblk.h
parentd8adaa3b86324c6186d0adf74bc256bdacfffdb6 (diff)
lightnvm: move bad block and chunk state logic to core
pblk implements two data paths for recovery line state. One for 1.2 and another for 2.0, instead of having pblk implement these, combine them in the core to reduce complexity and make available to other targets. The new interface will adhere to the 2.0 chunk definition, including managing open chunks with an active write pointer. To provide this interface, a 1.2 device recovers the state of the chunks by manually detecting if a chunk is either free/open/close/offline, and if open, scanning the flash pages sequentially to find the next writeable page. This process takes on average ~10 seconds on a device with 64 dies, 1024 blocks and 60us read access time. The process can be parallelized but is left out for maintenance simplicity, as the 1.2 specification is deprecated. For 2.0 devices, the logic is maintained internally in the drive and retrieved through the 2.0 interface. Signed-off-by: Matias Bjørling <mb@lightnvm.io> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/lightnvm/pblk.h')
-rw-r--r--drivers/lightnvm/pblk.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h
index 48b3035df3c4..579b4ea9716c 100644
--- a/drivers/lightnvm/pblk.h
+++ b/drivers/lightnvm/pblk.h
@@ -774,7 +774,7 @@ void pblk_set_sec_per_write(struct pblk *pblk, int sec_per_write);
774int pblk_setup_w_rec_rq(struct pblk *pblk, struct nvm_rq *rqd, 774int pblk_setup_w_rec_rq(struct pblk *pblk, struct nvm_rq *rqd,
775 struct pblk_c_ctx *c_ctx); 775 struct pblk_c_ctx *c_ctx);
776void pblk_discard(struct pblk *pblk, struct bio *bio); 776void pblk_discard(struct pblk *pblk, struct bio *bio);
777struct nvm_chk_meta *pblk_chunk_get_info(struct pblk *pblk); 777struct nvm_chk_meta *pblk_get_chunk_meta(struct pblk *pblk);
778struct nvm_chk_meta *pblk_chunk_get_off(struct pblk *pblk, 778struct nvm_chk_meta *pblk_chunk_get_off(struct pblk *pblk,
779 struct nvm_chk_meta *lp, 779 struct nvm_chk_meta *lp,
780 struct ppa_addr ppa); 780 struct ppa_addr ppa);