Lines Matching refs:rlun

25 #define rrpc_for_each_lun(rrpc, rlun, i) \  argument
26 for ((i) = 0, rlun = &(rrpc)->luns[0]; \
27 (i) < (rrpc)->nr_luns; (i)++, rlun = &(rrpc)->luns[(i)])
165 static void rrpc_set_lun_cur(struct rrpc_lun *rlun, struct rrpc_block *rblk) in rrpc_set_lun_cur() argument
167 struct rrpc *rrpc = rlun->rrpc; in rrpc_set_lun_cur()
171 if (rlun->cur) { in rrpc_set_lun_cur()
172 spin_lock(&rlun->cur->lock); in rrpc_set_lun_cur()
173 WARN_ON(!block_is_full(rrpc, rlun->cur)); in rrpc_set_lun_cur()
174 spin_unlock(&rlun->cur->lock); in rrpc_set_lun_cur()
176 rlun->cur = rblk; in rrpc_set_lun_cur()
179 static struct rrpc_block *rrpc_get_blk(struct rrpc *rrpc, struct rrpc_lun *rlun, in rrpc_get_blk() argument
185 blk = nvm_get_blk(rrpc->dev, rlun->parent, flags); in rrpc_get_blk()
189 rblk = &rlun->blocks[blk->id]; in rrpc_get_blk()
207 struct rrpc_lun *rlun; in rrpc_put_blks() local
211 rlun = &rrpc->luns[i]; in rrpc_put_blks()
212 if (rlun->cur) in rrpc_put_blks()
213 rrpc_put_blk(rrpc, rlun->cur); in rrpc_put_blks()
214 if (rlun->gc_cur) in rrpc_put_blks()
215 rrpc_put_blk(rrpc, rlun->gc_cur); in rrpc_put_blks()
228 struct rrpc_lun *rlun; in rrpc_gc_kick() local
232 rlun = &rrpc->luns[i]; in rrpc_gc_kick()
233 queue_work(rrpc->krqd_wq, &rlun->ws_gc); in rrpc_gc_kick()
403 static struct rrpc_block *block_prio_find_max(struct rrpc_lun *rlun) in block_prio_find_max() argument
405 struct list_head *prio_list = &rlun->prio_list; in block_prio_find_max()
419 struct rrpc_lun *rlun = container_of(work, struct rrpc_lun, ws_gc); in rrpc_lun_gc() local
420 struct rrpc *rrpc = rlun->rrpc; in rrpc_lun_gc()
421 struct nvm_lun *lun = rlun->parent; in rrpc_lun_gc()
432 !list_empty(&rlun->prio_list)) { in rrpc_lun_gc()
433 struct rrpc_block *rblock = block_prio_find_max(rlun); in rrpc_lun_gc()
469 struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset]; in rrpc_gc_queue() local
471 spin_lock(&rlun->lock); in rrpc_gc_queue()
472 list_add_tail(&rblk->prio, &rlun->prio_list); in rrpc_gc_queue()
473 spin_unlock(&rlun->lock); in rrpc_gc_queue()
487 struct rrpc_lun *rlun, *max_free; in rrpc_get_lun_rr() local
500 rrpc_for_each_lun(rrpc, rlun, i) { in rrpc_get_lun_rr()
501 if (rlun->parent->nr_free_blocks > in rrpc_get_lun_rr()
503 max_free = rlun; in rrpc_get_lun_rr()
559 struct rrpc_lun *rlun; in rrpc_map_page() local
564 rlun = rrpc_get_lun_rr(rrpc, is_gc); in rrpc_map_page()
565 lun = rlun->parent; in rrpc_map_page()
570 spin_lock(&rlun->lock); in rrpc_map_page()
572 rblk = rlun->cur; in rrpc_map_page()
577 rblk = rrpc_get_blk(rrpc, rlun, 0); in rrpc_map_page()
579 rrpc_set_lun_cur(rlun, rblk); in rrpc_map_page()
585 paddr = rrpc_alloc_addr(rrpc, rlun->gc_cur); in rrpc_map_page()
587 rblk = rrpc_get_blk(rrpc, rlun, 1); in rrpc_map_page()
593 rlun->gc_cur = rblk; in rrpc_map_page()
594 paddr = rrpc_alloc_addr(rrpc, rlun->gc_cur); in rrpc_map_page()
596 rblk = rlun->gc_cur; in rrpc_map_page()
600 spin_unlock(&rlun->lock); in rrpc_map_page()
603 spin_unlock(&rlun->lock); in rrpc_map_page()
910 struct rrpc_lun *rlun; in rrpc_gc_free() local
923 rlun = &rrpc->luns[i]; in rrpc_gc_free()
925 if (!rlun->blocks) in rrpc_gc_free()
927 vfree(rlun->blocks); in rrpc_gc_free()
1090 struct rrpc_lun *rlun; in rrpc_luns_init() local
1110 rlun = &rrpc->luns[i]; in rrpc_luns_init()
1111 rlun->rrpc = rrpc; in rrpc_luns_init()
1112 rlun->parent = lun; in rrpc_luns_init()
1113 INIT_LIST_HEAD(&rlun->prio_list); in rrpc_luns_init()
1114 INIT_WORK(&rlun->ws_gc, rrpc_lun_gc); in rrpc_luns_init()
1115 spin_lock_init(&rlun->lock); in rrpc_luns_init()
1120 rlun->blocks = vzalloc(sizeof(struct rrpc_block) * in rrpc_luns_init()
1122 if (!rlun->blocks) in rrpc_luns_init()
1126 struct rrpc_block *rblk = &rlun->blocks[j]; in rrpc_luns_init()
1213 struct rrpc_lun *rlun; in rrpc_blocks_init() local
1218 rlun = &rrpc->luns[lun_iter]; in rrpc_blocks_init()
1222 rblk = &rlun->blocks[blk_iter]; in rrpc_blocks_init()
1232 struct rrpc_lun *rlun; in rrpc_luns_configure() local
1237 rlun = &rrpc->luns[i]; in rrpc_luns_configure()
1239 rblk = rrpc_get_blk(rrpc, rlun, 0); in rrpc_luns_configure()
1243 rrpc_set_lun_cur(rlun, rblk); in rrpc_luns_configure()
1246 rblk = rrpc_get_blk(rrpc, rlun, 1); in rrpc_luns_configure()
1249 rlun->gc_cur = rblk; in rrpc_luns_configure()