diff options
author | Javier González <jg@lightnvm.io> | 2016-11-28 16:39:07 -0500 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-11-29 14:12:51 -0500 |
commit | 0ac4072eb10c9627415eb1ca511121156e20012c (patch) | |
tree | a2581ae27e54d08e0f95bdff8712fd5daade109e | |
parent | 8e79b5cb1d3b8eceaf6862995952dd4de431dd99 (diff) |
lightnvm: remove get_lun operation on gennvm
Since LUNs are managed internally on the target, there is no need for
the media manager to implement a get_lun operation.
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>
-rw-r--r-- | drivers/lightnvm/gennvm.c | 13 | ||||
-rw-r--r-- | drivers/lightnvm/rrpc.c | 23 | ||||
-rw-r--r-- | include/linux/lightnvm.h | 8 |
3 files changed, 14 insertions, 30 deletions
diff --git a/drivers/lightnvm/gennvm.c b/drivers/lightnvm/gennvm.c index 8791a2aaa9e3..3cf5d5947070 100644 --- a/drivers/lightnvm/gennvm.c +++ b/drivers/lightnvm/gennvm.c | |||
@@ -159,7 +159,7 @@ static int gen_create_tgt(struct nvm_dev *dev, struct nvm_ioctl_create *create) | |||
159 | tdisk->fops = &gen_fops; | 159 | tdisk->fops = &gen_fops; |
160 | tdisk->queue = tqueue; | 160 | tdisk->queue = tqueue; |
161 | 161 | ||
162 | targetdata = tt->init(tgt_dev, tdisk, s->lun_begin, s->lun_end); | 162 | targetdata = tt->init(tgt_dev, tdisk, &t->lun_list); |
163 | if (IS_ERR(targetdata)) | 163 | if (IS_ERR(targetdata)) |
164 | goto err_init; | 164 | goto err_init; |
165 | 165 | ||
@@ -613,16 +613,6 @@ static int gen_erase_blk(struct nvm_dev *dev, struct nvm_block *blk, int flags) | |||
613 | return nvm_erase_ppa(dev, &addr, 1, flags); | 613 | return nvm_erase_ppa(dev, &addr, 1, flags); |
614 | } | 614 | } |
615 | 615 | ||
616 | static struct nvm_lun *gen_get_lun(struct nvm_dev *dev, int lunid) | ||
617 | { | ||
618 | struct gen_dev *gn = dev->mp; | ||
619 | |||
620 | if (unlikely(lunid >= dev->geo.nr_luns)) | ||
621 | return NULL; | ||
622 | |||
623 | return &gn->luns[lunid]; | ||
624 | } | ||
625 | |||
626 | static void gen_lun_info_print(struct nvm_dev *dev) | 616 | static void gen_lun_info_print(struct nvm_dev *dev) |
627 | { | 617 | { |
628 | struct gen_dev *gn = dev->mp; | 618 | struct gen_dev *gn = dev->mp; |
@@ -655,7 +645,6 @@ static struct nvmm_type gen = { | |||
655 | 645 | ||
656 | .mark_blk = gen_mark_blk, | 646 | .mark_blk = gen_mark_blk, |
657 | 647 | ||
658 | .get_lun = gen_get_lun, | ||
659 | .lun_info_print = gen_lun_info_print, | 648 | .lun_info_print = gen_lun_info_print, |
660 | 649 | ||
661 | .get_area = gen_get_area, | 650 | .get_area = gen_get_area, |
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c index 5377c7a987aa..165b9d396493 100644 --- a/drivers/lightnvm/rrpc.c +++ b/drivers/lightnvm/rrpc.c | |||
@@ -1199,10 +1199,11 @@ static void rrpc_luns_free(struct rrpc *rrpc) | |||
1199 | kfree(rrpc->luns); | 1199 | kfree(rrpc->luns); |
1200 | } | 1200 | } |
1201 | 1201 | ||
1202 | static int rrpc_luns_init(struct rrpc *rrpc, int lun_begin, int lun_end) | 1202 | static int rrpc_luns_init(struct rrpc *rrpc, struct list_head *lun_list) |
1203 | { | 1203 | { |
1204 | struct nvm_tgt_dev *dev = rrpc->dev; | 1204 | struct nvm_tgt_dev *dev = rrpc->dev; |
1205 | struct nvm_geo *geo = &dev->geo; | 1205 | struct nvm_geo *geo = &dev->geo; |
1206 | struct nvm_lun *lun; | ||
1206 | struct rrpc_lun *rlun; | 1207 | struct rrpc_lun *rlun; |
1207 | int i, j, ret = -EINVAL; | 1208 | int i, j, ret = -EINVAL; |
1208 | 1209 | ||
@@ -1218,16 +1219,11 @@ static int rrpc_luns_init(struct rrpc *rrpc, int lun_begin, int lun_end) | |||
1218 | if (!rrpc->luns) | 1219 | if (!rrpc->luns) |
1219 | return -ENOMEM; | 1220 | return -ENOMEM; |
1220 | 1221 | ||
1221 | /* 1:1 mapping */ | 1222 | i = 0; |
1222 | for (i = 0; i < rrpc->nr_luns; i++) { | ||
1223 | int lunid = lun_begin + i; | ||
1224 | struct nvm_lun *lun; | ||
1225 | 1223 | ||
1226 | lun = dev->mt->get_lun(dev->parent, lunid); | 1224 | /* 1:1 mapping */ |
1227 | if (!lun) | 1225 | list_for_each_entry(lun, lun_list, list) { |
1228 | goto err; | 1226 | rlun = &rrpc->luns[i++]; |
1229 | |||
1230 | rlun = &rrpc->luns[i]; | ||
1231 | rlun->parent = lun; | 1227 | rlun->parent = lun; |
1232 | rlun->blocks = vzalloc(sizeof(struct rrpc_block) * | 1228 | rlun->blocks = vzalloc(sizeof(struct rrpc_block) * |
1233 | geo->blks_per_lun); | 1229 | geo->blks_per_lun); |
@@ -1256,6 +1252,8 @@ static int rrpc_luns_init(struct rrpc *rrpc, int lun_begin, int lun_end) | |||
1256 | spin_lock_init(&rlun->lock); | 1252 | spin_lock_init(&rlun->lock); |
1257 | } | 1253 | } |
1258 | 1254 | ||
1255 | WARN_ON(i != rrpc->nr_luns); | ||
1256 | |||
1259 | return 0; | 1257 | return 0; |
1260 | err: | 1258 | err: |
1261 | return ret; | 1259 | return ret; |
@@ -1410,12 +1408,13 @@ err: | |||
1410 | static struct nvm_tgt_type tt_rrpc; | 1408 | static struct nvm_tgt_type tt_rrpc; |
1411 | 1409 | ||
1412 | static void *rrpc_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk, | 1410 | static void *rrpc_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk, |
1413 | int lun_begin, int lun_end) | 1411 | struct list_head *lun_list) |
1414 | { | 1412 | { |
1415 | struct request_queue *bqueue = dev->q; | 1413 | struct request_queue *bqueue = dev->q; |
1416 | struct request_queue *tqueue = tdisk->queue; | 1414 | struct request_queue *tqueue = tdisk->queue; |
1417 | struct nvm_geo *geo = &dev->geo; | 1415 | struct nvm_geo *geo = &dev->geo; |
1418 | struct rrpc *rrpc; | 1416 | struct rrpc *rrpc; |
1417 | int lun_begin = (list_first_entry(lun_list, struct nvm_lun, list))->id; | ||
1419 | sector_t soffset; | 1418 | sector_t soffset; |
1420 | int ret; | 1419 | int ret; |
1421 | 1420 | ||
@@ -1450,7 +1449,7 @@ static void *rrpc_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk, | |||
1450 | } | 1449 | } |
1451 | rrpc->soffset = soffset; | 1450 | rrpc->soffset = soffset; |
1452 | 1451 | ||
1453 | ret = rrpc_luns_init(rrpc, lun_begin, lun_end); | 1452 | ret = rrpc_luns_init(rrpc, lun_list); |
1454 | if (ret) { | 1453 | if (ret) { |
1455 | pr_err("nvm: rrpc: could not initialize luns\n"); | 1454 | pr_err("nvm: rrpc: could not initialize luns\n"); |
1456 | goto err; | 1455 | goto err; |
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h index 1f1588c2557e..e56c35227249 100644 --- a/include/linux/lightnvm.h +++ b/include/linux/lightnvm.h | |||
@@ -504,8 +504,8 @@ static inline int ppa_to_slc(struct nvm_dev *dev, int slc_pg) | |||
504 | 504 | ||
505 | typedef blk_qc_t (nvm_tgt_make_rq_fn)(struct request_queue *, struct bio *); | 505 | typedef blk_qc_t (nvm_tgt_make_rq_fn)(struct request_queue *, struct bio *); |
506 | typedef sector_t (nvm_tgt_capacity_fn)(void *); | 506 | typedef sector_t (nvm_tgt_capacity_fn)(void *); |
507 | typedef void *(nvm_tgt_init_fn)(struct nvm_tgt_dev *, struct gendisk *, int, | 507 | typedef void *(nvm_tgt_init_fn)(struct nvm_tgt_dev *, struct gendisk *, |
508 | int); | 508 | struct list_head *lun_list); |
509 | typedef void (nvm_tgt_exit_fn)(void *); | 509 | typedef void (nvm_tgt_exit_fn)(void *); |
510 | 510 | ||
511 | struct nvm_tgt_type { | 511 | struct nvm_tgt_type { |
@@ -541,7 +541,6 @@ typedef int (nvmm_remove_tgt_fn)(struct nvm_dev *, struct nvm_ioctl_remove *); | |||
541 | typedef int (nvmm_submit_io_fn)(struct nvm_dev *, struct nvm_rq *); | 541 | typedef int (nvmm_submit_io_fn)(struct nvm_dev *, struct nvm_rq *); |
542 | typedef int (nvmm_erase_blk_fn)(struct nvm_dev *, struct nvm_block *, int); | 542 | typedef int (nvmm_erase_blk_fn)(struct nvm_dev *, struct nvm_block *, int); |
543 | typedef void (nvmm_mark_blk_fn)(struct nvm_dev *, struct ppa_addr, int); | 543 | typedef void (nvmm_mark_blk_fn)(struct nvm_dev *, struct ppa_addr, int); |
544 | typedef struct nvm_lun *(nvmm_get_lun_fn)(struct nvm_dev *, int); | ||
545 | typedef void (nvmm_lun_info_print_fn)(struct nvm_dev *); | 544 | typedef void (nvmm_lun_info_print_fn)(struct nvm_dev *); |
546 | 545 | ||
547 | typedef int (nvmm_get_area_fn)(struct nvm_dev *, sector_t *, sector_t); | 546 | typedef int (nvmm_get_area_fn)(struct nvm_dev *, sector_t *, sector_t); |
@@ -563,9 +562,6 @@ struct nvmm_type { | |||
563 | /* Bad block mgmt */ | 562 | /* Bad block mgmt */ |
564 | nvmm_mark_blk_fn *mark_blk; | 563 | nvmm_mark_blk_fn *mark_blk; |
565 | 564 | ||
566 | /* Configuration management */ | ||
567 | nvmm_get_lun_fn *get_lun; | ||
568 | |||
569 | /* Statistics */ | 565 | /* Statistics */ |
570 | nvmm_lun_info_print_fn *lun_info_print; | 566 | nvmm_lun_info_print_fn *lun_info_print; |
571 | 567 | ||