aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/core.c
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2016-11-28 16:38:56 -0500
committerJens Axboe <axboe@fb.com>2016-11-29 14:12:51 -0500
commita24ba4644b7ae5af3cd2eb6992c237cb4548c45e (patch)
tree63bf226681a0618d1c11642835f347c156a58421 /drivers/lightnvm/core.c
parent8a3c95ab385fb98621455807ae52b4454192f8c5 (diff)
lightnvm: export set bad block table
Bad blocks should be managed by block owners. This would be either targets for data blocks or sysblk for system blocks. In order to support this, export two functions: One to mark a block as an specific type (e.g., bad block) and another to update the bad block table on the device. Move bad block management to rrpc. Signed-off-by: Javier González <javier@cnexlabs.com> Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'drivers/lightnvm/core.c')
-rw-r--r--drivers/lightnvm/core.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 8664fe09cc82..6527cf6862fa 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -196,6 +196,33 @@ void nvm_mark_blk(struct nvm_dev *dev, struct ppa_addr ppa, int type)
196} 196}
197EXPORT_SYMBOL(nvm_mark_blk); 197EXPORT_SYMBOL(nvm_mark_blk);
198 198
199int nvm_set_bb_tbl(struct nvm_dev *dev, struct ppa_addr *ppas, int nr_ppas,
200 int type)
201{
202 struct nvm_rq rqd;
203 int ret;
204
205 if (nr_ppas > dev->ops->max_phys_sect) {
206 pr_err("nvm: unable to update all sysblocks atomically\n");
207 return -EINVAL;
208 }
209
210 memset(&rqd, 0, sizeof(struct nvm_rq));
211
212 nvm_set_rqd_ppalist(dev, &rqd, ppas, nr_ppas, 1);
213 nvm_generic_to_addr_mode(dev, &rqd);
214
215 ret = dev->ops->set_bb_tbl(dev, &rqd.ppa_addr, rqd.nr_ppas, type);
216 nvm_free_rqd_ppalist(dev, &rqd);
217 if (ret) {
218 pr_err("nvm: sysblk failed bb mark\n");
219 return -EINVAL;
220 }
221
222 return 0;
223}
224EXPORT_SYMBOL(nvm_set_bb_tbl);
225
199int nvm_submit_io(struct nvm_dev *dev, struct nvm_rq *rqd) 226int nvm_submit_io(struct nvm_dev *dev, struct nvm_rq *rqd)
200{ 227{
201 return dev->mt->submit_io(dev, rqd); 228 return dev->mt->submit_io(dev, rqd);