summaryrefslogtreecommitdiffstats
path: root/drivers/lightnvm
diff options
context:
space:
mode:
authorJavier González <jg@lightnvm.io>2016-05-06 14:03:15 -0400
committerJens Axboe <axboe@fb.com>2016-05-06 14:51:10 -0400
commitcca87bc9d359f1a03ac34ca095343d1bfa2e6b15 (patch)
treedcfc7dacb3b56ae987aa764008add0f499ff4ce9 /drivers/lightnvm
parentb86d8d363ece8fb9a7ec7e951c7f041f47f0f552 (diff)
lightnvm: do not assume sequential lun alloc.
When doing GC, rrpc calculates the physical LUN to which the rrpc block belongs too. This calculation is based on the assumption that LUNs are assigned sequentially to the LUN list. Use the reference to the LUN instead. This saves us the calculation and allows us to align LUNs in a different manner to, for example, take advantage of devide parallelism. 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')
-rw-r--r--drivers/lightnvm/rrpc.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
index ffcfee6684ba..48862ead7c99 100644
--- a/drivers/lightnvm/rrpc.c
+++ b/drivers/lightnvm/rrpc.c
@@ -405,9 +405,8 @@ static void rrpc_block_gc(struct work_struct *work)
405 ws_gc); 405 ws_gc);
406 struct rrpc *rrpc = gcb->rrpc; 406 struct rrpc *rrpc = gcb->rrpc;
407 struct rrpc_block *rblk = gcb->rblk; 407 struct rrpc_block *rblk = gcb->rblk;
408 struct rrpc_lun *rlun = rblk->rlun;
408 struct nvm_dev *dev = rrpc->dev; 409 struct nvm_dev *dev = rrpc->dev;
409 struct nvm_lun *lun = rblk->parent->lun;
410 struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset];
411 410
412 mempool_free(gcb, rrpc->gcb_pool); 411 mempool_free(gcb, rrpc->gcb_pool);
413 pr_debug("nvm: block '%lu' being reclaimed\n", rblk->parent->id); 412 pr_debug("nvm: block '%lu' being reclaimed\n", rblk->parent->id);
@@ -508,9 +507,9 @@ static void rrpc_gc_queue(struct work_struct *work)
508 ws_gc); 507 ws_gc);
509 struct rrpc *rrpc = gcb->rrpc; 508 struct rrpc *rrpc = gcb->rrpc;
510 struct rrpc_block *rblk = gcb->rblk; 509 struct rrpc_block *rblk = gcb->rblk;
510 struct rrpc_lun *rlun = rblk->rlun;
511 struct nvm_lun *lun = rblk->parent->lun; 511 struct nvm_lun *lun = rblk->parent->lun;
512 struct nvm_block *blk = rblk->parent; 512 struct nvm_block *blk = rblk->parent;
513 struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset];
514 513
515 spin_lock(&rlun->lock); 514 spin_lock(&rlun->lock);
516 list_add_tail(&rblk->prio, &rlun->prio_list); 515 list_add_tail(&rblk->prio, &rlun->prio_list);