aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm/core.c
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2016-11-28 16:39:10 -0500
committerJens Axboe <axboe@fb.com>2016-11-29 14:12:51 -0500
commit8e53624d44c1de31b1b0d4f500703669418a4c67 (patch)
treec4e2e7600ada505ac12b7bd85ba7607c016c9939 /drivers/lightnvm/core.c
parent2a02e627c245bfa987b97707123d7747d7b0e486 (diff)
lightnvm: eliminate nvm_lun abstraction in mm
In order to naturally support multi-target instances on an Open-Channel SSD, targets should own the LUNs they get blocks from and manage provisioning internally. This is done in several steps. Since targets own the LUNs the are instantiated on top of and manage the free block list internally, there is no need for a LUN abstraction in the media manager. LUNs are intrinsically managed as in the physical layout (ch:0,lun:0, ..., ch:0,lun:n, ch:1,lun:0, ch:1,lun:n, ..., ch:m,lun:0, ch:m,lun:n) and given to the targets based on the target creation ioctl. This simplifies LUN management and clears the path for a partition manager to sit directly underneath LightNVM targets. 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.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 691b16ffda88..23d582f82219 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -203,15 +203,19 @@ int nvm_set_bb_tbl(struct nvm_dev *dev, struct ppa_addr *ppas, int nr_ppas,
203} 203}
204EXPORT_SYMBOL(nvm_set_bb_tbl); 204EXPORT_SYMBOL(nvm_set_bb_tbl);
205 205
206int nvm_submit_io(struct nvm_dev *dev, struct nvm_rq *rqd) 206int nvm_submit_io(struct nvm_tgt_dev *tgt_dev, struct nvm_rq *rqd)
207{ 207{
208 return dev->mt->submit_io(dev, rqd); 208 struct nvm_dev *dev = tgt_dev->parent;
209
210 return dev->mt->submit_io(tgt_dev, rqd);
209} 211}
210EXPORT_SYMBOL(nvm_submit_io); 212EXPORT_SYMBOL(nvm_submit_io);
211 213
212int nvm_erase_blk(struct nvm_dev *dev, struct ppa_addr *p, int flags) 214int nvm_erase_blk(struct nvm_tgt_dev *tgt_dev, struct ppa_addr *p, int flags)
213{ 215{
214 return dev->mt->erase_blk(dev, p, flags); 216 struct nvm_dev *dev = tgt_dev->parent;
217
218 return dev->mt->erase_blk(tgt_dev, p, flags);
215} 219}
216EXPORT_SYMBOL(nvm_erase_blk); 220EXPORT_SYMBOL(nvm_erase_blk);
217 221
@@ -350,7 +354,7 @@ static int __nvm_submit_ppa(struct nvm_dev *dev, struct nvm_rq *rqd, int opcode,
350 354
351 nvm_generic_to_addr_mode(dev, rqd); 355 nvm_generic_to_addr_mode(dev, rqd);
352 356
353 rqd->dev = dev; 357 rqd->dev = NULL;
354 rqd->opcode = opcode; 358 rqd->opcode = opcode;
355 rqd->flags = flags; 359 rqd->flags = flags;
356 rqd->bio = bio; 360 rqd->bio = bio;