Lines Matching refs:rblk
31 struct rrpc_block *rblk = a->rblk; in rrpc_page_invalidate() local
36 if (a->addr == ADDR_EMPTY || !rblk) in rrpc_page_invalidate()
39 spin_lock(&rblk->lock); in rrpc_page_invalidate()
42 WARN_ON(test_and_set_bit(pg_offset, rblk->invalid_pages)); in rrpc_page_invalidate()
43 rblk->nr_invalid_pages++; in rrpc_page_invalidate()
45 spin_unlock(&rblk->lock); in rrpc_page_invalidate()
60 gp->rblk = NULL; in rrpc_invalidate_range()
114 static int block_is_full(struct rrpc *rrpc, struct rrpc_block *rblk) in block_is_full() argument
116 return (rblk->next_page == rrpc->dev->pgs_per_blk); in block_is_full()
119 static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk) in block_to_addr() argument
121 struct nvm_block *blk = rblk->parent; in block_to_addr()
165 static void rrpc_set_lun_cur(struct rrpc_lun *rlun, struct rrpc_block *rblk) in rrpc_set_lun_cur() argument
169 BUG_ON(!rblk); in rrpc_set_lun_cur()
176 rlun->cur = rblk; in rrpc_set_lun_cur()
183 struct rrpc_block *rblk; in rrpc_get_blk() local
189 rblk = &rlun->blocks[blk->id]; in rrpc_get_blk()
190 blk->priv = rblk; in rrpc_get_blk()
192 bitmap_zero(rblk->invalid_pages, rrpc->dev->pgs_per_blk); in rrpc_get_blk()
193 rblk->next_page = 0; in rrpc_get_blk()
194 rblk->nr_invalid_pages = 0; in rrpc_get_blk()
195 atomic_set(&rblk->data_cmnt_size, 0); in rrpc_get_blk()
197 return rblk; in rrpc_get_blk()
200 static void rrpc_put_blk(struct rrpc *rrpc, struct rrpc_block *rblk) in rrpc_put_blk() argument
202 nvm_put_blk(rrpc->dev, rblk->parent); in rrpc_put_blk()
268 static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk) in rrpc_move_valid_pages() argument
280 if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk)) in rrpc_move_valid_pages()
291 while ((slot = find_first_zero_bit(rblk->invalid_pages, in rrpc_move_valid_pages()
295 phys_addr = (rblk->parent->id * nr_pgs_per_blk) + slot; in rrpc_move_valid_pages()
361 if (!bitmap_full(rblk->invalid_pages, nr_pgs_per_blk)) { in rrpc_move_valid_pages()
374 struct rrpc_block *rblk = gcb->rblk; in rrpc_block_gc() local
377 pr_debug("nvm: block '%lu' being reclaimed\n", rblk->parent->id); in rrpc_block_gc()
379 if (rrpc_move_valid_pages(rrpc, rblk)) in rrpc_block_gc()
382 nvm_erase_blk(dev, rblk->parent); in rrpc_block_gc()
383 rrpc_put_blk(rrpc, rblk); in rrpc_block_gc()
450 gcb->rblk = rblock; in rrpc_lun_gc()
467 struct rrpc_block *rblk = gcb->rblk; in rrpc_gc_queue() local
468 struct nvm_lun *lun = rblk->parent->lun; in rrpc_gc_queue()
472 list_add_tail(&rblk->prio, &rlun->prio_list); in rrpc_gc_queue()
477 rblk->parent->id); in rrpc_gc_queue()
510 struct rrpc_block *rblk, u64 paddr) in rrpc_update_map() argument
519 if (gp->rblk) in rrpc_update_map()
523 gp->rblk = rblk; in rrpc_update_map()
532 static u64 rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk) in rrpc_alloc_addr() argument
536 spin_lock(&rblk->lock); in rrpc_alloc_addr()
537 if (block_is_full(rrpc, rblk)) in rrpc_alloc_addr()
540 addr = block_to_addr(rrpc, rblk) + rblk->next_page; in rrpc_alloc_addr()
542 rblk->next_page++; in rrpc_alloc_addr()
544 spin_unlock(&rblk->lock); in rrpc_alloc_addr()
560 struct rrpc_block *rblk; in rrpc_map_page() local
572 rblk = rlun->cur; in rrpc_map_page()
574 paddr = rrpc_alloc_addr(rrpc, rblk); in rrpc_map_page()
577 rblk = rrpc_get_blk(rrpc, rlun, 0); in rrpc_map_page()
578 if (rblk) { in rrpc_map_page()
579 rrpc_set_lun_cur(rlun, rblk); in rrpc_map_page()
587 rblk = rrpc_get_blk(rrpc, rlun, 1); in rrpc_map_page()
588 if (!rblk) { in rrpc_map_page()
593 rlun->gc_cur = rblk; in rrpc_map_page()
596 rblk = rlun->gc_cur; in rrpc_map_page()
601 return rrpc_update_map(rrpc, laddr, rblk, paddr); in rrpc_map_page()
607 static void rrpc_run_gc(struct rrpc *rrpc, struct rrpc_block *rblk) in rrpc_run_gc() argument
618 gcb->rblk = rblk; in rrpc_run_gc()
628 struct rrpc_block *rblk; in rrpc_end_io_write() local
634 rblk = p->rblk; in rrpc_end_io_write()
635 lun = rblk->parent->lun; in rrpc_end_io_write()
637 cmnt_size = atomic_inc_return(&rblk->data_cmnt_size); in rrpc_end_io_write()
639 rrpc_run_gc(rrpc, rblk); in rrpc_end_io_write()
688 if (gp->rblk) { in rrpc_read_ppalist_rq()
719 if (gp->rblk) { in rrpc_read_rq()
1126 struct rrpc_block *rblk = &rlun->blocks[j]; in rrpc_luns_init() local
1129 rblk->parent = blk; in rrpc_luns_init()
1130 INIT_LIST_HEAD(&rblk->prio); in rrpc_luns_init()
1131 spin_lock_init(&rblk->lock); in rrpc_luns_init()
1186 static void rrpc_block_map_update(struct rrpc *rrpc, struct rrpc_block *rblk) in rrpc_block_map_update() argument
1194 paddr = block_to_addr(rrpc, rblk) + offset; in rrpc_block_map_update()
1203 laddr->rblk = rblk; in rrpc_block_map_update()
1205 set_bit(offset, rblk->invalid_pages); in rrpc_block_map_update()
1206 rblk->nr_invalid_pages++; in rrpc_block_map_update()
1214 struct rrpc_block *rblk; in rrpc_blocks_init() local
1222 rblk = &rlun->blocks[blk_iter]; in rrpc_blocks_init()
1223 rrpc_block_map_update(rrpc, rblk); in rrpc_blocks_init()
1233 struct rrpc_block *rblk; in rrpc_luns_configure() local
1239 rblk = rrpc_get_blk(rrpc, rlun, 0); in rrpc_luns_configure()
1240 if (!rblk) 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()
1247 if (!rblk) in rrpc_luns_configure()
1249 rlun->gc_cur = rblk; in rrpc_luns_configure()