aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatias Bjørling <m@bjorling.me>2016-01-12 01:49:28 -0500
committerJens Axboe <axboe@fb.com>2016-01-12 10:21:17 -0500
commit81e681d3f7424fc2f03b6269e15c63131473c98f (patch)
tree9ca8a01523dbc3775f2d89e7772dd1b2f4f34b00
parent4b79beb4c36d697e940e9f70d72399c71230a418 (diff)
lightnvm: support multiple ppas in nvm_erase_ppa
Sometimes a user want to erase multiple PPAs at the same time. Extend nvm_erase_ppa to take multiple ppas and number of ppas to be erased. Signed-off-by: Matias Bjørling <m@bjorling.me> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/lightnvm/core.c4
-rw-r--r--drivers/lightnvm/gennvm.c2
-rw-r--r--include/linux/lightnvm.h2
3 files changed, 4 insertions, 4 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 0c8f42fc5f01..cd674af3d17d 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -265,7 +265,7 @@ void nvm_free_rqd_ppalist(struct nvm_dev *dev, struct nvm_rq *rqd)
265} 265}
266EXPORT_SYMBOL(nvm_free_rqd_ppalist); 266EXPORT_SYMBOL(nvm_free_rqd_ppalist);
267 267
268int nvm_erase_ppa(struct nvm_dev *dev, struct ppa_addr ppa) 268int nvm_erase_ppa(struct nvm_dev *dev, struct ppa_addr *ppas, int nr_ppas)
269{ 269{
270 struct nvm_rq rqd; 270 struct nvm_rq rqd;
271 int ret; 271 int ret;
@@ -275,7 +275,7 @@ int nvm_erase_ppa(struct nvm_dev *dev, struct ppa_addr ppa)
275 275
276 memset(&rqd, 0, sizeof(struct nvm_rq)); 276 memset(&rqd, 0, sizeof(struct nvm_rq));
277 277
278 ret = nvm_set_rqd_ppalist(dev, &rqd, &ppa, 1); 278 ret = nvm_set_rqd_ppalist(dev, &rqd, ppas, nr_ppas);
279 if (ret) 279 if (ret)
280 return ret; 280 return ret;
281 281
diff --git a/drivers/lightnvm/gennvm.c b/drivers/lightnvm/gennvm.c
index 12ddcaa343e9..262da6dd9056 100644
--- a/drivers/lightnvm/gennvm.c
+++ b/drivers/lightnvm/gennvm.c
@@ -396,7 +396,7 @@ static int gennvm_erase_blk(struct nvm_dev *dev, struct nvm_block *blk,
396{ 396{
397 struct ppa_addr addr = block_to_ppa(dev, blk); 397 struct ppa_addr addr = block_to_ppa(dev, blk);
398 398
399 return nvm_erase_ppa(dev, addr); 399 return nvm_erase_ppa(dev, &addr, 1);
400} 400}
401 401
402static struct nvm_lun *gennvm_get_lun(struct nvm_dev *dev, int lunid) 402static struct nvm_lun *gennvm_get_lun(struct nvm_dev *dev, int lunid)
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 9c9fe9ca0441..a83298f62122 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -435,7 +435,7 @@ extern void nvm_addr_to_generic_mode(struct nvm_dev *, struct nvm_rq *);
435extern int nvm_set_rqd_ppalist(struct nvm_dev *, struct nvm_rq *, 435extern int nvm_set_rqd_ppalist(struct nvm_dev *, struct nvm_rq *,
436 struct ppa_addr *, int); 436 struct ppa_addr *, int);
437extern void nvm_free_rqd_ppalist(struct nvm_dev *, struct nvm_rq *); 437extern void nvm_free_rqd_ppalist(struct nvm_dev *, struct nvm_rq *);
438extern int nvm_erase_ppa(struct nvm_dev *, struct ppa_addr); 438extern int nvm_erase_ppa(struct nvm_dev *, struct ppa_addr *, int);
439extern int nvm_erase_blk(struct nvm_dev *, struct nvm_block *); 439extern int nvm_erase_blk(struct nvm_dev *, struct nvm_block *);
440extern void nvm_end_io(struct nvm_rq *, int); 440extern void nvm_end_io(struct nvm_rq *, int);
441#else /* CONFIG_NVM */ 441#else /* CONFIG_NVM */