diff options
author | Matias Bjørling <m@bjorling.me> | 2016-01-12 01:49:28 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-01-12 10:21:17 -0500 |
commit | 81e681d3f7424fc2f03b6269e15c63131473c98f (patch) | |
tree | 9ca8a01523dbc3775f2d89e7772dd1b2f4f34b00 | |
parent | 4b79beb4c36d697e940e9f70d72399c71230a418 (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.c | 4 | ||||
-rw-r--r-- | drivers/lightnvm/gennvm.c | 2 | ||||
-rw-r--r-- | include/linux/lightnvm.h | 2 |
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 | } |
266 | EXPORT_SYMBOL(nvm_free_rqd_ppalist); | 266 | EXPORT_SYMBOL(nvm_free_rqd_ppalist); |
267 | 267 | ||
268 | int nvm_erase_ppa(struct nvm_dev *dev, struct ppa_addr ppa) | 268 | int 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 | ||
402 | static struct nvm_lun *gennvm_get_lun(struct nvm_dev *dev, int lunid) | 402 | static 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 *); | |||
435 | extern int nvm_set_rqd_ppalist(struct nvm_dev *, struct nvm_rq *, | 435 | extern int nvm_set_rqd_ppalist(struct nvm_dev *, struct nvm_rq *, |
436 | struct ppa_addr *, int); | 436 | struct ppa_addr *, int); |
437 | extern void nvm_free_rqd_ppalist(struct nvm_dev *, struct nvm_rq *); | 437 | extern void nvm_free_rqd_ppalist(struct nvm_dev *, struct nvm_rq *); |
438 | extern int nvm_erase_ppa(struct nvm_dev *, struct ppa_addr); | 438 | extern int nvm_erase_ppa(struct nvm_dev *, struct ppa_addr *, int); |
439 | extern int nvm_erase_blk(struct nvm_dev *, struct nvm_block *); | 439 | extern int nvm_erase_blk(struct nvm_dev *, struct nvm_block *); |
440 | extern void nvm_end_io(struct nvm_rq *, int); | 440 | extern void nvm_end_io(struct nvm_rq *, int); |
441 | #else /* CONFIG_NVM */ | 441 | #else /* CONFIG_NVM */ |