rrpc.c 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383
  1. /*
  2. * Copyright (C) 2015 IT University of Copenhagen
  3. * Initial release: Matias Bjorling <m@bjorling.me>
  4. *
  5. * This program is free software; you can redistribute it and/or
  6. * modify it under the terms of the GNU General Public License version
  7. * 2 as published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * General Public License for more details.
  13. *
  14. * Implementation of a Round-robin page-based Hybrid FTL for Open-channel SSDs.
  15. */
  16. #include "rrpc.h"
  17. static struct kmem_cache *rrpc_gcb_cache, *rrpc_rq_cache;
  18. static DECLARE_RWSEM(rrpc_lock);
  19. static int rrpc_submit_io(struct rrpc *rrpc, struct bio *bio,
  20. struct nvm_rq *rqd, unsigned long flags);
  21. #define rrpc_for_each_lun(rrpc, rlun, i) \
  22. for ((i) = 0, rlun = &(rrpc)->luns[0]; \
  23. (i) < (rrpc)->nr_luns; (i)++, rlun = &(rrpc)->luns[(i)])
  24. static void rrpc_page_invalidate(struct rrpc *rrpc, struct rrpc_addr *a)
  25. {
  26. struct rrpc_block *rblk = a->rblk;
  27. unsigned int pg_offset;
  28. lockdep_assert_held(&rrpc->rev_lock);
  29. if (a->addr == ADDR_EMPTY || !rblk)
  30. return;
  31. spin_lock(&rblk->lock);
  32. div_u64_rem(a->addr, rrpc->dev->pgs_per_blk, &pg_offset);
  33. WARN_ON(test_and_set_bit(pg_offset, rblk->invalid_pages));
  34. rblk->nr_invalid_pages++;
  35. spin_unlock(&rblk->lock);
  36. rrpc->rev_trans_map[a->addr - rrpc->poffset].addr = ADDR_EMPTY;
  37. }
  38. static void rrpc_invalidate_range(struct rrpc *rrpc, sector_t slba,
  39. unsigned len)
  40. {
  41. sector_t i;
  42. spin_lock(&rrpc->rev_lock);
  43. for (i = slba; i < slba + len; i++) {
  44. struct rrpc_addr *gp = &rrpc->trans_map[i];
  45. rrpc_page_invalidate(rrpc, gp);
  46. gp->rblk = NULL;
  47. }
  48. spin_unlock(&rrpc->rev_lock);
  49. }
  50. static struct nvm_rq *rrpc_inflight_laddr_acquire(struct rrpc *rrpc,
  51. sector_t laddr, unsigned int pages)
  52. {
  53. struct nvm_rq *rqd;
  54. struct rrpc_inflight_rq *inf;
  55. rqd = mempool_alloc(rrpc->rq_pool, GFP_ATOMIC);
  56. if (!rqd)
  57. return ERR_PTR(-ENOMEM);
  58. inf = rrpc_get_inflight_rq(rqd);
  59. if (rrpc_lock_laddr(rrpc, laddr, pages, inf)) {
  60. mempool_free(rqd, rrpc->rq_pool);
  61. return NULL;
  62. }
  63. return rqd;
  64. }
  65. static void rrpc_inflight_laddr_release(struct rrpc *rrpc, struct nvm_rq *rqd)
  66. {
  67. struct rrpc_inflight_rq *inf = rrpc_get_inflight_rq(rqd);
  68. rrpc_unlock_laddr(rrpc, inf);
  69. mempool_free(rqd, rrpc->rq_pool);
  70. }
  71. static void rrpc_discard(struct rrpc *rrpc, struct bio *bio)
  72. {
  73. sector_t slba = bio->bi_iter.bi_sector / NR_PHY_IN_LOG;
  74. sector_t len = bio->bi_iter.bi_size / RRPC_EXPOSED_PAGE_SIZE;
  75. struct nvm_rq *rqd;
  76. do {
  77. rqd = rrpc_inflight_laddr_acquire(rrpc, slba, len);
  78. schedule();
  79. } while (!rqd);
  80. if (IS_ERR(rqd)) {
  81. pr_err("rrpc: unable to acquire inflight IO\n");
  82. bio_io_error(bio);
  83. return;
  84. }
  85. rrpc_invalidate_range(rrpc, slba, len);
  86. rrpc_inflight_laddr_release(rrpc, rqd);
  87. }
  88. static int block_is_full(struct rrpc *rrpc, struct rrpc_block *rblk)
  89. {
  90. return (rblk->next_page == rrpc->dev->pgs_per_blk);
  91. }
  92. static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
  93. {
  94. struct nvm_block *blk = rblk->parent;
  95. return blk->id * rrpc->dev->pgs_per_blk;
  96. }
  97. static struct ppa_addr linear_to_generic_addr(struct nvm_dev *dev,
  98. struct ppa_addr r)
  99. {
  100. struct ppa_addr l;
  101. int secs, pgs, blks, luns;
  102. sector_t ppa = r.ppa;
  103. l.ppa = 0;
  104. div_u64_rem(ppa, dev->sec_per_pg, &secs);
  105. l.g.sec = secs;
  106. sector_div(ppa, dev->sec_per_pg);
  107. div_u64_rem(ppa, dev->sec_per_blk, &pgs);
  108. l.g.pg = pgs;
  109. sector_div(ppa, dev->pgs_per_blk);
  110. div_u64_rem(ppa, dev->blks_per_lun, &blks);
  111. l.g.blk = blks;
  112. sector_div(ppa, dev->blks_per_lun);
  113. div_u64_rem(ppa, dev->luns_per_chnl, &luns);
  114. l.g.lun = luns;
  115. sector_div(ppa, dev->luns_per_chnl);
  116. l.g.ch = ppa;
  117. return l;
  118. }
  119. static struct ppa_addr rrpc_ppa_to_gaddr(struct nvm_dev *dev, u64 addr)
  120. {
  121. struct ppa_addr paddr;
  122. paddr.ppa = addr;
  123. return linear_to_generic_addr(dev, paddr);
  124. }
  125. /* requires lun->lock taken */
  126. static void rrpc_set_lun_cur(struct rrpc_lun *rlun, struct rrpc_block *rblk)
  127. {
  128. struct rrpc *rrpc = rlun->rrpc;
  129. BUG_ON(!rblk);
  130. if (rlun->cur) {
  131. spin_lock(&rlun->cur->lock);
  132. WARN_ON(!block_is_full(rrpc, rlun->cur));
  133. spin_unlock(&rlun->cur->lock);
  134. }
  135. rlun->cur = rblk;
  136. }
  137. static struct rrpc_block *rrpc_get_blk(struct rrpc *rrpc, struct rrpc_lun *rlun,
  138. unsigned long flags)
  139. {
  140. struct nvm_block *blk;
  141. struct rrpc_block *rblk;
  142. blk = nvm_get_blk(rrpc->dev, rlun->parent, flags);
  143. if (!blk)
  144. return NULL;
  145. rblk = &rlun->blocks[blk->id];
  146. blk->priv = rblk;
  147. bitmap_zero(rblk->invalid_pages, rrpc->dev->pgs_per_blk);
  148. rblk->next_page = 0;
  149. rblk->nr_invalid_pages = 0;
  150. atomic_set(&rblk->data_cmnt_size, 0);
  151. return rblk;
  152. }
  153. static void rrpc_put_blk(struct rrpc *rrpc, struct rrpc_block *rblk)
  154. {
  155. nvm_put_blk(rrpc->dev, rblk->parent);
  156. }
  157. static void rrpc_put_blks(struct rrpc *rrpc)
  158. {
  159. struct rrpc_lun *rlun;
  160. int i;
  161. for (i = 0; i < rrpc->nr_luns; i++) {
  162. rlun = &rrpc->luns[i];
  163. if (rlun->cur)
  164. rrpc_put_blk(rrpc, rlun->cur);
  165. if (rlun->gc_cur)
  166. rrpc_put_blk(rrpc, rlun->gc_cur);
  167. }
  168. }
  169. static struct rrpc_lun *get_next_lun(struct rrpc *rrpc)
  170. {
  171. int next = atomic_inc_return(&rrpc->next_lun);
  172. return &rrpc->luns[next % rrpc->nr_luns];
  173. }
  174. static void rrpc_gc_kick(struct rrpc *rrpc)
  175. {
  176. struct rrpc_lun *rlun;
  177. unsigned int i;
  178. for (i = 0; i < rrpc->nr_luns; i++) {
  179. rlun = &rrpc->luns[i];
  180. queue_work(rrpc->krqd_wq, &rlun->ws_gc);
  181. }
  182. }
  183. /*
  184. * timed GC every interval.
  185. */
  186. static void rrpc_gc_timer(unsigned long data)
  187. {
  188. struct rrpc *rrpc = (struct rrpc *)data;
  189. rrpc_gc_kick(rrpc);
  190. mod_timer(&rrpc->gc_timer, jiffies + msecs_to_jiffies(10));
  191. }
  192. static void rrpc_end_sync_bio(struct bio *bio)
  193. {
  194. struct completion *waiting = bio->bi_private;
  195. if (bio->bi_error)
  196. pr_err("nvm: gc request failed (%u).\n", bio->bi_error);
  197. complete(waiting);
  198. }
  199. /*
  200. * rrpc_move_valid_pages -- migrate live data off the block
  201. * @rrpc: the 'rrpc' structure
  202. * @block: the block from which to migrate live pages
  203. *
  204. * Description:
  205. * GC algorithms may call this function to migrate remaining live
  206. * pages off the block prior to erasing it. This function blocks
  207. * further execution until the operation is complete.
  208. */
  209. static int rrpc_move_valid_pages(struct rrpc *rrpc, struct rrpc_block *rblk)
  210. {
  211. struct request_queue *q = rrpc->dev->q;
  212. struct rrpc_rev_addr *rev;
  213. struct nvm_rq *rqd;
  214. struct bio *bio;
  215. struct page *page;
  216. int slot;
  217. int nr_pgs_per_blk = rrpc->dev->pgs_per_blk;
  218. u64 phys_addr;
  219. DECLARE_COMPLETION_ONSTACK(wait);
  220. if (bitmap_full(rblk->invalid_pages, nr_pgs_per_blk))
  221. return 0;
  222. bio = bio_alloc(GFP_NOIO, 1);
  223. if (!bio) {
  224. pr_err("nvm: could not alloc bio to gc\n");
  225. return -ENOMEM;
  226. }
  227. page = mempool_alloc(rrpc->page_pool, GFP_NOIO);
  228. if (!page) {
  229. bio_put(bio);
  230. return -ENOMEM;
  231. }
  232. while ((slot = find_first_zero_bit(rblk->invalid_pages,
  233. nr_pgs_per_blk)) < nr_pgs_per_blk) {
  234. /* Lock laddr */
  235. phys_addr = (rblk->parent->id * nr_pgs_per_blk) + slot;
  236. try:
  237. spin_lock(&rrpc->rev_lock);
  238. /* Get logical address from physical to logical table */
  239. rev = &rrpc->rev_trans_map[phys_addr - rrpc->poffset];
  240. /* already updated by previous regular write */
  241. if (rev->addr == ADDR_EMPTY) {
  242. spin_unlock(&rrpc->rev_lock);
  243. continue;
  244. }
  245. rqd = rrpc_inflight_laddr_acquire(rrpc, rev->addr, 1);
  246. if (IS_ERR_OR_NULL(rqd)) {
  247. spin_unlock(&rrpc->rev_lock);
  248. schedule();
  249. goto try;
  250. }
  251. spin_unlock(&rrpc->rev_lock);
  252. /* Perform read to do GC */
  253. bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr);
  254. bio->bi_rw = READ;
  255. bio->bi_private = &wait;
  256. bio->bi_end_io = rrpc_end_sync_bio;
  257. /* TODO: may fail when EXP_PG_SIZE > PAGE_SIZE */
  258. bio_add_pc_page(q, bio, page, RRPC_EXPOSED_PAGE_SIZE, 0);
  259. if (rrpc_submit_io(rrpc, bio, rqd, NVM_IOTYPE_GC)) {
  260. pr_err("rrpc: gc read failed.\n");
  261. rrpc_inflight_laddr_release(rrpc, rqd);
  262. goto finished;
  263. }
  264. wait_for_completion_io(&wait);
  265. bio_reset(bio);
  266. reinit_completion(&wait);
  267. bio->bi_iter.bi_sector = rrpc_get_sector(rev->addr);
  268. bio->bi_rw = WRITE;
  269. bio->bi_private = &wait;
  270. bio->bi_end_io = rrpc_end_sync_bio;
  271. bio_add_pc_page(q, bio, page, RRPC_EXPOSED_PAGE_SIZE, 0);
  272. /* turn the command around and write the data back to a new
  273. * address
  274. */
  275. if (rrpc_submit_io(rrpc, bio, rqd, NVM_IOTYPE_GC)) {
  276. pr_err("rrpc: gc write failed.\n");
  277. rrpc_inflight_laddr_release(rrpc, rqd);
  278. goto finished;
  279. }
  280. wait_for_completion_io(&wait);
  281. rrpc_inflight_laddr_release(rrpc, rqd);
  282. bio_reset(bio);
  283. }
  284. finished:
  285. mempool_free(page, rrpc->page_pool);
  286. bio_put(bio);
  287. if (!bitmap_full(rblk->invalid_pages, nr_pgs_per_blk)) {
  288. pr_err("nvm: failed to garbage collect block\n");
  289. return -EIO;
  290. }
  291. return 0;
  292. }
  293. static void rrpc_block_gc(struct work_struct *work)
  294. {
  295. struct rrpc_block_gc *gcb = container_of(work, struct rrpc_block_gc,
  296. ws_gc);
  297. struct rrpc *rrpc = gcb->rrpc;
  298. struct rrpc_block *rblk = gcb->rblk;
  299. struct nvm_dev *dev = rrpc->dev;
  300. pr_debug("nvm: block '%lu' being reclaimed\n", rblk->parent->id);
  301. if (rrpc_move_valid_pages(rrpc, rblk))
  302. goto done;
  303. nvm_erase_blk(dev, rblk->parent);
  304. rrpc_put_blk(rrpc, rblk);
  305. done:
  306. mempool_free(gcb, rrpc->gcb_pool);
  307. }
  308. /* the block with highest number of invalid pages, will be in the beginning
  309. * of the list
  310. */
  311. static struct rrpc_block *rblock_max_invalid(struct rrpc_block *ra,
  312. struct rrpc_block *rb)
  313. {
  314. if (ra->nr_invalid_pages == rb->nr_invalid_pages)
  315. return ra;
  316. return (ra->nr_invalid_pages < rb->nr_invalid_pages) ? rb : ra;
  317. }
  318. /* linearly find the block with highest number of invalid pages
  319. * requires lun->lock
  320. */
  321. static struct rrpc_block *block_prio_find_max(struct rrpc_lun *rlun)
  322. {
  323. struct list_head *prio_list = &rlun->prio_list;
  324. struct rrpc_block *rblock, *max;
  325. BUG_ON(list_empty(prio_list));
  326. max = list_first_entry(prio_list, struct rrpc_block, prio);
  327. list_for_each_entry(rblock, prio_list, prio)
  328. max = rblock_max_invalid(max, rblock);
  329. return max;
  330. }
  331. static void rrpc_lun_gc(struct work_struct *work)
  332. {
  333. struct rrpc_lun *rlun = container_of(work, struct rrpc_lun, ws_gc);
  334. struct rrpc *rrpc = rlun->rrpc;
  335. struct nvm_lun *lun = rlun->parent;
  336. struct rrpc_block_gc *gcb;
  337. unsigned int nr_blocks_need;
  338. nr_blocks_need = rrpc->dev->blks_per_lun / GC_LIMIT_INVERSE;
  339. if (nr_blocks_need < rrpc->nr_luns)
  340. nr_blocks_need = rrpc->nr_luns;
  341. spin_lock(&rlun->lock);
  342. while (nr_blocks_need > lun->nr_free_blocks &&
  343. !list_empty(&rlun->prio_list)) {
  344. struct rrpc_block *rblock = block_prio_find_max(rlun);
  345. struct nvm_block *block = rblock->parent;
  346. if (!rblock->nr_invalid_pages)
  347. break;
  348. gcb = mempool_alloc(rrpc->gcb_pool, GFP_ATOMIC);
  349. if (!gcb)
  350. break;
  351. list_del_init(&rblock->prio);
  352. BUG_ON(!block_is_full(rrpc, rblock));
  353. pr_debug("rrpc: selected block '%lu' for GC\n", block->id);
  354. gcb->rrpc = rrpc;
  355. gcb->rblk = rblock;
  356. INIT_WORK(&gcb->ws_gc, rrpc_block_gc);
  357. queue_work(rrpc->kgc_wq, &gcb->ws_gc);
  358. nr_blocks_need--;
  359. }
  360. spin_unlock(&rlun->lock);
  361. /* TODO: Hint that request queue can be started again */
  362. }
  363. static void rrpc_gc_queue(struct work_struct *work)
  364. {
  365. struct rrpc_block_gc *gcb = container_of(work, struct rrpc_block_gc,
  366. ws_gc);
  367. struct rrpc *rrpc = gcb->rrpc;
  368. struct rrpc_block *rblk = gcb->rblk;
  369. struct nvm_lun *lun = rblk->parent->lun;
  370. struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset];
  371. spin_lock(&rlun->lock);
  372. list_add_tail(&rblk->prio, &rlun->prio_list);
  373. spin_unlock(&rlun->lock);
  374. mempool_free(gcb, rrpc->gcb_pool);
  375. pr_debug("nvm: block '%lu' is full, allow GC (sched)\n",
  376. rblk->parent->id);
  377. }
  378. static const struct block_device_operations rrpc_fops = {
  379. .owner = THIS_MODULE,
  380. };
  381. static struct rrpc_lun *rrpc_get_lun_rr(struct rrpc *rrpc, int is_gc)
  382. {
  383. unsigned int i;
  384. struct rrpc_lun *rlun, *max_free;
  385. if (!is_gc)
  386. return get_next_lun(rrpc);
  387. /* during GC, we don't care about RR, instead we want to make
  388. * sure that we maintain evenness between the block luns.
  389. */
  390. max_free = &rrpc->luns[0];
  391. /* prevent GC-ing lun from devouring pages of a lun with
  392. * little free blocks. We don't take the lock as we only need an
  393. * estimate.
  394. */
  395. rrpc_for_each_lun(rrpc, rlun, i) {
  396. if (rlun->parent->nr_free_blocks >
  397. max_free->parent->nr_free_blocks)
  398. max_free = rlun;
  399. }
  400. return max_free;
  401. }
  402. static struct rrpc_addr *rrpc_update_map(struct rrpc *rrpc, sector_t laddr,
  403. struct rrpc_block *rblk, u64 paddr)
  404. {
  405. struct rrpc_addr *gp;
  406. struct rrpc_rev_addr *rev;
  407. BUG_ON(laddr >= rrpc->nr_pages);
  408. gp = &rrpc->trans_map[laddr];
  409. spin_lock(&rrpc->rev_lock);
  410. if (gp->rblk)
  411. rrpc_page_invalidate(rrpc, gp);
  412. gp->addr = paddr;
  413. gp->rblk = rblk;
  414. rev = &rrpc->rev_trans_map[gp->addr - rrpc->poffset];
  415. rev->addr = laddr;
  416. spin_unlock(&rrpc->rev_lock);
  417. return gp;
  418. }
  419. static u64 rrpc_alloc_addr(struct rrpc *rrpc, struct rrpc_block *rblk)
  420. {
  421. u64 addr = ADDR_EMPTY;
  422. spin_lock(&rblk->lock);
  423. if (block_is_full(rrpc, rblk))
  424. goto out;
  425. addr = block_to_addr(rrpc, rblk) + rblk->next_page;
  426. rblk->next_page++;
  427. out:
  428. spin_unlock(&rblk->lock);
  429. return addr;
  430. }
  431. /* Simple round-robin Logical to physical address translation.
  432. *
  433. * Retrieve the mapping using the active append point. Then update the ap for
  434. * the next write to the disk.
  435. *
  436. * Returns rrpc_addr with the physical address and block. Remember to return to
  437. * rrpc->addr_cache when request is finished.
  438. */
  439. static struct rrpc_addr *rrpc_map_page(struct rrpc *rrpc, sector_t laddr,
  440. int is_gc)
  441. {
  442. struct rrpc_lun *rlun;
  443. struct rrpc_block *rblk;
  444. struct nvm_lun *lun;
  445. u64 paddr;
  446. rlun = rrpc_get_lun_rr(rrpc, is_gc);
  447. lun = rlun->parent;
  448. if (!is_gc && lun->nr_free_blocks < rrpc->nr_luns * 4)
  449. return NULL;
  450. spin_lock(&rlun->lock);
  451. rblk = rlun->cur;
  452. retry:
  453. paddr = rrpc_alloc_addr(rrpc, rblk);
  454. if (paddr == ADDR_EMPTY) {
  455. rblk = rrpc_get_blk(rrpc, rlun, 0);
  456. if (rblk) {
  457. rrpc_set_lun_cur(rlun, rblk);
  458. goto retry;
  459. }
  460. if (is_gc) {
  461. /* retry from emergency gc block */
  462. paddr = rrpc_alloc_addr(rrpc, rlun->gc_cur);
  463. if (paddr == ADDR_EMPTY) {
  464. rblk = rrpc_get_blk(rrpc, rlun, 1);
  465. if (!rblk) {
  466. pr_err("rrpc: no more blocks");
  467. goto err;
  468. }
  469. rlun->gc_cur = rblk;
  470. paddr = rrpc_alloc_addr(rrpc, rlun->gc_cur);
  471. }
  472. rblk = rlun->gc_cur;
  473. }
  474. }
  475. spin_unlock(&rlun->lock);
  476. return rrpc_update_map(rrpc, laddr, rblk, paddr);
  477. err:
  478. spin_unlock(&rlun->lock);
  479. return NULL;
  480. }
  481. static void rrpc_run_gc(struct rrpc *rrpc, struct rrpc_block *rblk)
  482. {
  483. struct rrpc_block_gc *gcb;
  484. gcb = mempool_alloc(rrpc->gcb_pool, GFP_ATOMIC);
  485. if (!gcb) {
  486. pr_err("rrpc: unable to queue block for gc.");
  487. return;
  488. }
  489. gcb->rrpc = rrpc;
  490. gcb->rblk = rblk;
  491. INIT_WORK(&gcb->ws_gc, rrpc_gc_queue);
  492. queue_work(rrpc->kgc_wq, &gcb->ws_gc);
  493. }
  494. static void rrpc_end_io_write(struct rrpc *rrpc, struct rrpc_rq *rrqd,
  495. sector_t laddr, uint8_t npages)
  496. {
  497. struct rrpc_addr *p;
  498. struct rrpc_block *rblk;
  499. struct nvm_lun *lun;
  500. int cmnt_size, i;
  501. for (i = 0; i < npages; i++) {
  502. p = &rrpc->trans_map[laddr + i];
  503. rblk = p->rblk;
  504. lun = rblk->parent->lun;
  505. cmnt_size = atomic_inc_return(&rblk->data_cmnt_size);
  506. if (unlikely(cmnt_size == rrpc->dev->pgs_per_blk))
  507. rrpc_run_gc(rrpc, rblk);
  508. }
  509. }
  510. static int rrpc_end_io(struct nvm_rq *rqd, int error)
  511. {
  512. struct rrpc *rrpc = container_of(rqd->ins, struct rrpc, instance);
  513. struct rrpc_rq *rrqd = nvm_rq_to_pdu(rqd);
  514. uint8_t npages = rqd->nr_pages;
  515. sector_t laddr = rrpc_get_laddr(rqd->bio) - npages;
  516. if (bio_data_dir(rqd->bio) == WRITE)
  517. rrpc_end_io_write(rrpc, rrqd, laddr, npages);
  518. bio_put(rqd->bio);
  519. if (rrqd->flags & NVM_IOTYPE_GC)
  520. return 0;
  521. rrpc_unlock_rq(rrpc, rqd);
  522. if (npages > 1)
  523. nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
  524. if (rqd->metadata)
  525. nvm_dev_dma_free(rrpc->dev, rqd->metadata, rqd->dma_metadata);
  526. mempool_free(rqd, rrpc->rq_pool);
  527. return 0;
  528. }
  529. static int rrpc_read_ppalist_rq(struct rrpc *rrpc, struct bio *bio,
  530. struct nvm_rq *rqd, unsigned long flags, int npages)
  531. {
  532. struct rrpc_inflight_rq *r = rrpc_get_inflight_rq(rqd);
  533. struct rrpc_addr *gp;
  534. sector_t laddr = rrpc_get_laddr(bio);
  535. int is_gc = flags & NVM_IOTYPE_GC;
  536. int i;
  537. if (!is_gc && rrpc_lock_rq(rrpc, bio, rqd)) {
  538. nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
  539. return NVM_IO_REQUEUE;
  540. }
  541. for (i = 0; i < npages; i++) {
  542. /* We assume that mapping occurs at 4KB granularity */
  543. BUG_ON(!(laddr + i >= 0 && laddr + i < rrpc->nr_pages));
  544. gp = &rrpc->trans_map[laddr + i];
  545. if (gp->rblk) {
  546. rqd->ppa_list[i] = rrpc_ppa_to_gaddr(rrpc->dev,
  547. gp->addr);
  548. } else {
  549. BUG_ON(is_gc);
  550. rrpc_unlock_laddr(rrpc, r);
  551. nvm_dev_dma_free(rrpc->dev, rqd->ppa_list,
  552. rqd->dma_ppa_list);
  553. return NVM_IO_DONE;
  554. }
  555. }
  556. rqd->opcode = NVM_OP_HBREAD;
  557. return NVM_IO_OK;
  558. }
  559. static int rrpc_read_rq(struct rrpc *rrpc, struct bio *bio, struct nvm_rq *rqd,
  560. unsigned long flags)
  561. {
  562. struct rrpc_rq *rrqd = nvm_rq_to_pdu(rqd);
  563. int is_gc = flags & NVM_IOTYPE_GC;
  564. sector_t laddr = rrpc_get_laddr(bio);
  565. struct rrpc_addr *gp;
  566. if (!is_gc && rrpc_lock_rq(rrpc, bio, rqd))
  567. return NVM_IO_REQUEUE;
  568. BUG_ON(!(laddr >= 0 && laddr < rrpc->nr_pages));
  569. gp = &rrpc->trans_map[laddr];
  570. if (gp->rblk) {
  571. rqd->ppa_addr = rrpc_ppa_to_gaddr(rrpc->dev, gp->addr);
  572. } else {
  573. BUG_ON(is_gc);
  574. rrpc_unlock_rq(rrpc, rqd);
  575. return NVM_IO_DONE;
  576. }
  577. rqd->opcode = NVM_OP_HBREAD;
  578. rrqd->addr = gp;
  579. return NVM_IO_OK;
  580. }
  581. static int rrpc_write_ppalist_rq(struct rrpc *rrpc, struct bio *bio,
  582. struct nvm_rq *rqd, unsigned long flags, int npages)
  583. {
  584. struct rrpc_inflight_rq *r = rrpc_get_inflight_rq(rqd);
  585. struct rrpc_addr *p;
  586. sector_t laddr = rrpc_get_laddr(bio);
  587. int is_gc = flags & NVM_IOTYPE_GC;
  588. int i;
  589. if (!is_gc && rrpc_lock_rq(rrpc, bio, rqd)) {
  590. nvm_dev_dma_free(rrpc->dev, rqd->ppa_list, rqd->dma_ppa_list);
  591. return NVM_IO_REQUEUE;
  592. }
  593. for (i = 0; i < npages; i++) {
  594. /* We assume that mapping occurs at 4KB granularity */
  595. p = rrpc_map_page(rrpc, laddr + i, is_gc);
  596. if (!p) {
  597. BUG_ON(is_gc);
  598. rrpc_unlock_laddr(rrpc, r);
  599. nvm_dev_dma_free(rrpc->dev, rqd->ppa_list,
  600. rqd->dma_ppa_list);
  601. rrpc_gc_kick(rrpc);
  602. return NVM_IO_REQUEUE;
  603. }
  604. rqd->ppa_list[i] = rrpc_ppa_to_gaddr(rrpc->dev,
  605. p->addr);
  606. }
  607. rqd->opcode = NVM_OP_HBWRITE;
  608. return NVM_IO_OK;
  609. }
  610. static int rrpc_write_rq(struct rrpc *rrpc, struct bio *bio,
  611. struct nvm_rq *rqd, unsigned long flags)
  612. {
  613. struct rrpc_rq *rrqd = nvm_rq_to_pdu(rqd);
  614. struct rrpc_addr *p;
  615. int is_gc = flags & NVM_IOTYPE_GC;
  616. sector_t laddr = rrpc_get_laddr(bio);
  617. if (!is_gc && rrpc_lock_rq(rrpc, bio, rqd))
  618. return NVM_IO_REQUEUE;
  619. p = rrpc_map_page(rrpc, laddr, is_gc);
  620. if (!p) {
  621. BUG_ON(is_gc);
  622. rrpc_unlock_rq(rrpc, rqd);
  623. rrpc_gc_kick(rrpc);
  624. return NVM_IO_REQUEUE;
  625. }
  626. rqd->ppa_addr = rrpc_ppa_to_gaddr(rrpc->dev, p->addr);
  627. rqd->opcode = NVM_OP_HBWRITE;
  628. rrqd->addr = p;
  629. return NVM_IO_OK;
  630. }
  631. static int rrpc_setup_rq(struct rrpc *rrpc, struct bio *bio,
  632. struct nvm_rq *rqd, unsigned long flags, uint8_t npages)
  633. {
  634. if (npages > 1) {
  635. rqd->ppa_list = nvm_dev_dma_alloc(rrpc->dev, GFP_KERNEL,
  636. &rqd->dma_ppa_list);
  637. if (!rqd->ppa_list) {
  638. pr_err("rrpc: not able to allocate ppa list\n");
  639. return NVM_IO_ERR;
  640. }
  641. if (bio_rw(bio) == WRITE)
  642. return rrpc_write_ppalist_rq(rrpc, bio, rqd, flags,
  643. npages);
  644. return rrpc_read_ppalist_rq(rrpc, bio, rqd, flags, npages);
  645. }
  646. if (bio_rw(bio) == WRITE)
  647. return rrpc_write_rq(rrpc, bio, rqd, flags);
  648. return rrpc_read_rq(rrpc, bio, rqd, flags);
  649. }
  650. static int rrpc_submit_io(struct rrpc *rrpc, struct bio *bio,
  651. struct nvm_rq *rqd, unsigned long flags)
  652. {
  653. int err;
  654. struct rrpc_rq *rrq = nvm_rq_to_pdu(rqd);
  655. uint8_t nr_pages = rrpc_get_pages(bio);
  656. int bio_size = bio_sectors(bio) << 9;
  657. if (bio_size < rrpc->dev->sec_size)
  658. return NVM_IO_ERR;
  659. else if (bio_size > rrpc->dev->max_rq_size)
  660. return NVM_IO_ERR;
  661. err = rrpc_setup_rq(rrpc, bio, rqd, flags, nr_pages);
  662. if (err)
  663. return err;
  664. bio_get(bio);
  665. rqd->bio = bio;
  666. rqd->ins = &rrpc->instance;
  667. rqd->nr_pages = nr_pages;
  668. rrq->flags = flags;
  669. err = nvm_submit_io(rrpc->dev, rqd);
  670. if (err) {
  671. pr_err("rrpc: I/O submission failed: %d\n", err);
  672. bio_put(bio);
  673. if (!(flags & NVM_IOTYPE_GC)) {
  674. rrpc_unlock_rq(rrpc, rqd);
  675. if (rqd->nr_pages > 1)
  676. nvm_dev_dma_free(rrpc->dev,
  677. rqd->ppa_list, rqd->dma_ppa_list);
  678. }
  679. return NVM_IO_ERR;
  680. }
  681. return NVM_IO_OK;
  682. }
  683. static blk_qc_t rrpc_make_rq(struct request_queue *q, struct bio *bio)
  684. {
  685. struct rrpc *rrpc = q->queuedata;
  686. struct nvm_rq *rqd;
  687. int err;
  688. if (bio->bi_rw & REQ_DISCARD) {
  689. rrpc_discard(rrpc, bio);
  690. return BLK_QC_T_NONE;
  691. }
  692. rqd = mempool_alloc(rrpc->rq_pool, GFP_KERNEL);
  693. if (!rqd) {
  694. pr_err_ratelimited("rrpc: not able to queue bio.");
  695. bio_io_error(bio);
  696. return BLK_QC_T_NONE;
  697. }
  698. memset(rqd, 0, sizeof(struct nvm_rq));
  699. err = rrpc_submit_io(rrpc, bio, rqd, NVM_IOTYPE_NONE);
  700. switch (err) {
  701. case NVM_IO_OK:
  702. return BLK_QC_T_NONE;
  703. case NVM_IO_ERR:
  704. bio_io_error(bio);
  705. break;
  706. case NVM_IO_DONE:
  707. bio_endio(bio);
  708. break;
  709. case NVM_IO_REQUEUE:
  710. spin_lock(&rrpc->bio_lock);
  711. bio_list_add(&rrpc->requeue_bios, bio);
  712. spin_unlock(&rrpc->bio_lock);
  713. queue_work(rrpc->kgc_wq, &rrpc->ws_requeue);
  714. break;
  715. }
  716. mempool_free(rqd, rrpc->rq_pool);
  717. return BLK_QC_T_NONE;
  718. }
  719. static void rrpc_requeue(struct work_struct *work)
  720. {
  721. struct rrpc *rrpc = container_of(work, struct rrpc, ws_requeue);
  722. struct bio_list bios;
  723. struct bio *bio;
  724. bio_list_init(&bios);
  725. spin_lock(&rrpc->bio_lock);
  726. bio_list_merge(&bios, &rrpc->requeue_bios);
  727. bio_list_init(&rrpc->requeue_bios);
  728. spin_unlock(&rrpc->bio_lock);
  729. while ((bio = bio_list_pop(&bios)))
  730. rrpc_make_rq(rrpc->disk->queue, bio);
  731. }
  732. static void rrpc_gc_free(struct rrpc *rrpc)
  733. {
  734. struct rrpc_lun *rlun;
  735. int i;
  736. if (rrpc->krqd_wq)
  737. destroy_workqueue(rrpc->krqd_wq);
  738. if (rrpc->kgc_wq)
  739. destroy_workqueue(rrpc->kgc_wq);
  740. if (!rrpc->luns)
  741. return;
  742. for (i = 0; i < rrpc->nr_luns; i++) {
  743. rlun = &rrpc->luns[i];
  744. if (!rlun->blocks)
  745. break;
  746. vfree(rlun->blocks);
  747. }
  748. }
  749. static int rrpc_gc_init(struct rrpc *rrpc)
  750. {
  751. rrpc->krqd_wq = alloc_workqueue("rrpc-lun", WQ_MEM_RECLAIM|WQ_UNBOUND,
  752. rrpc->nr_luns);
  753. if (!rrpc->krqd_wq)
  754. return -ENOMEM;
  755. rrpc->kgc_wq = alloc_workqueue("rrpc-bg", WQ_MEM_RECLAIM, 1);
  756. if (!rrpc->kgc_wq)
  757. return -ENOMEM;
  758. setup_timer(&rrpc->gc_timer, rrpc_gc_timer, (unsigned long)rrpc);
  759. return 0;
  760. }
  761. static void rrpc_map_free(struct rrpc *rrpc)
  762. {
  763. vfree(rrpc->rev_trans_map);
  764. vfree(rrpc->trans_map);
  765. }
  766. static int rrpc_l2p_update(u64 slba, u32 nlb, __le64 *entries, void *private)
  767. {
  768. struct rrpc *rrpc = (struct rrpc *)private;
  769. struct nvm_dev *dev = rrpc->dev;
  770. struct rrpc_addr *addr = rrpc->trans_map + slba;
  771. struct rrpc_rev_addr *raddr = rrpc->rev_trans_map;
  772. sector_t max_pages = dev->total_pages * (dev->sec_size >> 9);
  773. u64 elba = slba + nlb;
  774. u64 i;
  775. if (unlikely(elba > dev->total_pages)) {
  776. pr_err("nvm: L2P data from device is out of bounds!\n");
  777. return -EINVAL;
  778. }
  779. for (i = 0; i < nlb; i++) {
  780. u64 pba = le64_to_cpu(entries[i]);
  781. /* LNVM treats address-spaces as silos, LBA and PBA are
  782. * equally large and zero-indexed.
  783. */
  784. if (unlikely(pba >= max_pages && pba != U64_MAX)) {
  785. pr_err("nvm: L2P data entry is out of bounds!\n");
  786. return -EINVAL;
  787. }
  788. /* Address zero is a special one. The first page on a disk is
  789. * protected. As it often holds internal device boot
  790. * information.
  791. */
  792. if (!pba)
  793. continue;
  794. addr[i].addr = pba;
  795. raddr[pba].addr = slba + i;
  796. }
  797. return 0;
  798. }
  799. static int rrpc_map_init(struct rrpc *rrpc)
  800. {
  801. struct nvm_dev *dev = rrpc->dev;
  802. sector_t i;
  803. int ret;
  804. rrpc->trans_map = vzalloc(sizeof(struct rrpc_addr) * rrpc->nr_pages);
  805. if (!rrpc->trans_map)
  806. return -ENOMEM;
  807. rrpc->rev_trans_map = vmalloc(sizeof(struct rrpc_rev_addr)
  808. * rrpc->nr_pages);
  809. if (!rrpc->rev_trans_map)
  810. return -ENOMEM;
  811. for (i = 0; i < rrpc->nr_pages; i++) {
  812. struct rrpc_addr *p = &rrpc->trans_map[i];
  813. struct rrpc_rev_addr *r = &rrpc->rev_trans_map[i];
  814. p->addr = ADDR_EMPTY;
  815. r->addr = ADDR_EMPTY;
  816. }
  817. if (!dev->ops->get_l2p_tbl)
  818. return 0;
  819. /* Bring up the mapping table from device */
  820. ret = dev->ops->get_l2p_tbl(dev, 0, dev->total_pages,
  821. rrpc_l2p_update, rrpc);
  822. if (ret) {
  823. pr_err("nvm: rrpc: could not read L2P table.\n");
  824. return -EINVAL;
  825. }
  826. return 0;
  827. }
  828. /* Minimum pages needed within a lun */
  829. #define PAGE_POOL_SIZE 16
  830. #define ADDR_POOL_SIZE 64
  831. static int rrpc_core_init(struct rrpc *rrpc)
  832. {
  833. down_write(&rrpc_lock);
  834. if (!rrpc_gcb_cache) {
  835. rrpc_gcb_cache = kmem_cache_create("rrpc_gcb",
  836. sizeof(struct rrpc_block_gc), 0, 0, NULL);
  837. if (!rrpc_gcb_cache) {
  838. up_write(&rrpc_lock);
  839. return -ENOMEM;
  840. }
  841. rrpc_rq_cache = kmem_cache_create("rrpc_rq",
  842. sizeof(struct nvm_rq) + sizeof(struct rrpc_rq),
  843. 0, 0, NULL);
  844. if (!rrpc_rq_cache) {
  845. kmem_cache_destroy(rrpc_gcb_cache);
  846. up_write(&rrpc_lock);
  847. return -ENOMEM;
  848. }
  849. }
  850. up_write(&rrpc_lock);
  851. rrpc->page_pool = mempool_create_page_pool(PAGE_POOL_SIZE, 0);
  852. if (!rrpc->page_pool)
  853. return -ENOMEM;
  854. rrpc->gcb_pool = mempool_create_slab_pool(rrpc->dev->nr_luns,
  855. rrpc_gcb_cache);
  856. if (!rrpc->gcb_pool)
  857. return -ENOMEM;
  858. rrpc->rq_pool = mempool_create_slab_pool(64, rrpc_rq_cache);
  859. if (!rrpc->rq_pool)
  860. return -ENOMEM;
  861. spin_lock_init(&rrpc->inflights.lock);
  862. INIT_LIST_HEAD(&rrpc->inflights.reqs);
  863. return 0;
  864. }
  865. static void rrpc_core_free(struct rrpc *rrpc)
  866. {
  867. mempool_destroy(rrpc->page_pool);
  868. mempool_destroy(rrpc->gcb_pool);
  869. mempool_destroy(rrpc->rq_pool);
  870. }
  871. static void rrpc_luns_free(struct rrpc *rrpc)
  872. {
  873. kfree(rrpc->luns);
  874. }
  875. static int rrpc_luns_init(struct rrpc *rrpc, int lun_begin, int lun_end)
  876. {
  877. struct nvm_dev *dev = rrpc->dev;
  878. struct rrpc_lun *rlun;
  879. int i, j;
  880. spin_lock_init(&rrpc->rev_lock);
  881. rrpc->luns = kcalloc(rrpc->nr_luns, sizeof(struct rrpc_lun),
  882. GFP_KERNEL);
  883. if (!rrpc->luns)
  884. return -ENOMEM;
  885. /* 1:1 mapping */
  886. for (i = 0; i < rrpc->nr_luns; i++) {
  887. struct nvm_lun *lun = dev->mt->get_lun(dev, lun_begin + i);
  888. if (dev->pgs_per_blk >
  889. MAX_INVALID_PAGES_STORAGE * BITS_PER_LONG) {
  890. pr_err("rrpc: number of pages per block too high.");
  891. goto err;
  892. }
  893. rlun = &rrpc->luns[i];
  894. rlun->rrpc = rrpc;
  895. rlun->parent = lun;
  896. INIT_LIST_HEAD(&rlun->prio_list);
  897. INIT_WORK(&rlun->ws_gc, rrpc_lun_gc);
  898. spin_lock_init(&rlun->lock);
  899. rrpc->total_blocks += dev->blks_per_lun;
  900. rrpc->nr_pages += dev->sec_per_lun;
  901. rlun->blocks = vzalloc(sizeof(struct rrpc_block) *
  902. rrpc->dev->blks_per_lun);
  903. if (!rlun->blocks)
  904. goto err;
  905. for (j = 0; j < rrpc->dev->blks_per_lun; j++) {
  906. struct rrpc_block *rblk = &rlun->blocks[j];
  907. struct nvm_block *blk = &lun->blocks[j];
  908. rblk->parent = blk;
  909. INIT_LIST_HEAD(&rblk->prio);
  910. spin_lock_init(&rblk->lock);
  911. }
  912. }
  913. return 0;
  914. err:
  915. return -ENOMEM;
  916. }
  917. static void rrpc_free(struct rrpc *rrpc)
  918. {
  919. rrpc_gc_free(rrpc);
  920. rrpc_map_free(rrpc);
  921. rrpc_core_free(rrpc);
  922. rrpc_luns_free(rrpc);
  923. kfree(rrpc);
  924. }
  925. static void rrpc_exit(void *private)
  926. {
  927. struct rrpc *rrpc = private;
  928. del_timer(&rrpc->gc_timer);
  929. flush_workqueue(rrpc->krqd_wq);
  930. flush_workqueue(rrpc->kgc_wq);
  931. rrpc_free(rrpc);
  932. }
  933. static sector_t rrpc_capacity(void *private)
  934. {
  935. struct rrpc *rrpc = private;
  936. struct nvm_dev *dev = rrpc->dev;
  937. sector_t reserved, provisioned;
  938. /* cur, gc, and two emergency blocks for each lun */
  939. reserved = rrpc->nr_luns * dev->max_pages_per_blk * 4;
  940. provisioned = rrpc->nr_pages - reserved;
  941. if (reserved > rrpc->nr_pages) {
  942. pr_err("rrpc: not enough space available to expose storage.\n");
  943. return 0;
  944. }
  945. sector_div(provisioned, 10);
  946. return provisioned * 9 * NR_PHY_IN_LOG;
  947. }
  948. /*
  949. * Looks up the logical address from reverse trans map and check if its valid by
  950. * comparing the logical to physical address with the physical address.
  951. * Returns 0 on free, otherwise 1 if in use
  952. */
  953. static void rrpc_block_map_update(struct rrpc *rrpc, struct rrpc_block *rblk)
  954. {
  955. struct nvm_dev *dev = rrpc->dev;
  956. int offset;
  957. struct rrpc_addr *laddr;
  958. u64 paddr, pladdr;
  959. for (offset = 0; offset < dev->pgs_per_blk; offset++) {
  960. paddr = block_to_addr(rrpc, rblk) + offset;
  961. pladdr = rrpc->rev_trans_map[paddr].addr;
  962. if (pladdr == ADDR_EMPTY)
  963. continue;
  964. laddr = &rrpc->trans_map[pladdr];
  965. if (paddr == laddr->addr) {
  966. laddr->rblk = rblk;
  967. } else {
  968. set_bit(offset, rblk->invalid_pages);
  969. rblk->nr_invalid_pages++;
  970. }
  971. }
  972. }
  973. static int rrpc_blocks_init(struct rrpc *rrpc)
  974. {
  975. struct rrpc_lun *rlun;
  976. struct rrpc_block *rblk;
  977. int lun_iter, blk_iter;
  978. for (lun_iter = 0; lun_iter < rrpc->nr_luns; lun_iter++) {
  979. rlun = &rrpc->luns[lun_iter];
  980. for (blk_iter = 0; blk_iter < rrpc->dev->blks_per_lun;
  981. blk_iter++) {
  982. rblk = &rlun->blocks[blk_iter];
  983. rrpc_block_map_update(rrpc, rblk);
  984. }
  985. }
  986. return 0;
  987. }
  988. static int rrpc_luns_configure(struct rrpc *rrpc)
  989. {
  990. struct rrpc_lun *rlun;
  991. struct rrpc_block *rblk;
  992. int i;
  993. for (i = 0; i < rrpc->nr_luns; i++) {
  994. rlun = &rrpc->luns[i];
  995. rblk = rrpc_get_blk(rrpc, rlun, 0);
  996. if (!rblk)
  997. goto err;
  998. rrpc_set_lun_cur(rlun, rblk);
  999. /* Emergency gc block */
  1000. rblk = rrpc_get_blk(rrpc, rlun, 1);
  1001. if (!rblk)
  1002. goto err;
  1003. rlun->gc_cur = rblk;
  1004. }
  1005. return 0;
  1006. err:
  1007. rrpc_put_blks(rrpc);
  1008. return -EINVAL;
  1009. }
  1010. static struct nvm_tgt_type tt_rrpc;
  1011. static void *rrpc_init(struct nvm_dev *dev, struct gendisk *tdisk,
  1012. int lun_begin, int lun_end)
  1013. {
  1014. struct request_queue *bqueue = dev->q;
  1015. struct request_queue *tqueue = tdisk->queue;
  1016. struct rrpc *rrpc;
  1017. int ret;
  1018. if (!(dev->identity.dom & NVM_RSP_L2P)) {
  1019. pr_err("nvm: rrpc: device does not support l2p (%x)\n",
  1020. dev->identity.dom);
  1021. return ERR_PTR(-EINVAL);
  1022. }
  1023. rrpc = kzalloc(sizeof(struct rrpc), GFP_KERNEL);
  1024. if (!rrpc)
  1025. return ERR_PTR(-ENOMEM);
  1026. rrpc->instance.tt = &tt_rrpc;
  1027. rrpc->dev = dev;
  1028. rrpc->disk = tdisk;
  1029. bio_list_init(&rrpc->requeue_bios);
  1030. spin_lock_init(&rrpc->bio_lock);
  1031. INIT_WORK(&rrpc->ws_requeue, rrpc_requeue);
  1032. rrpc->nr_luns = lun_end - lun_begin + 1;
  1033. /* simple round-robin strategy */
  1034. atomic_set(&rrpc->next_lun, -1);
  1035. ret = rrpc_luns_init(rrpc, lun_begin, lun_end);
  1036. if (ret) {
  1037. pr_err("nvm: rrpc: could not initialize luns\n");
  1038. goto err;
  1039. }
  1040. rrpc->poffset = dev->sec_per_lun * lun_begin;
  1041. rrpc->lun_offset = lun_begin;
  1042. ret = rrpc_core_init(rrpc);
  1043. if (ret) {
  1044. pr_err("nvm: rrpc: could not initialize core\n");
  1045. goto err;
  1046. }
  1047. ret = rrpc_map_init(rrpc);
  1048. if (ret) {
  1049. pr_err("nvm: rrpc: could not initialize maps\n");
  1050. goto err;
  1051. }
  1052. ret = rrpc_blocks_init(rrpc);
  1053. if (ret) {
  1054. pr_err("nvm: rrpc: could not initialize state for blocks\n");
  1055. goto err;
  1056. }
  1057. ret = rrpc_luns_configure(rrpc);
  1058. if (ret) {
  1059. pr_err("nvm: rrpc: not enough blocks available in LUNs.\n");
  1060. goto err;
  1061. }
  1062. ret = rrpc_gc_init(rrpc);
  1063. if (ret) {
  1064. pr_err("nvm: rrpc: could not initialize gc\n");
  1065. goto err;
  1066. }
  1067. /* inherit the size from the underlying device */
  1068. blk_queue_logical_block_size(tqueue, queue_physical_block_size(bqueue));
  1069. blk_queue_max_hw_sectors(tqueue, queue_max_hw_sectors(bqueue));
  1070. pr_info("nvm: rrpc initialized with %u luns and %llu pages.\n",
  1071. rrpc->nr_luns, (unsigned long long)rrpc->nr_pages);
  1072. mod_timer(&rrpc->gc_timer, jiffies + msecs_to_jiffies(10));
  1073. return rrpc;
  1074. err:
  1075. rrpc_free(rrpc);
  1076. return ERR_PTR(ret);
  1077. }
  1078. /* round robin, page-based FTL, and cost-based GC */
  1079. static struct nvm_tgt_type tt_rrpc = {
  1080. .name = "rrpc",
  1081. .version = {1, 0, 0},
  1082. .make_rq = rrpc_make_rq,
  1083. .capacity = rrpc_capacity,
  1084. .end_io = rrpc_end_io,
  1085. .init = rrpc_init,
  1086. .exit = rrpc_exit,
  1087. };
  1088. static int __init rrpc_module_init(void)
  1089. {
  1090. return nvm_register_target(&tt_rrpc);
  1091. }
  1092. static void rrpc_module_exit(void)
  1093. {
  1094. nvm_unregister_target(&tt_rrpc);
  1095. }
  1096. module_init(rrpc_module_init);
  1097. module_exit(rrpc_module_exit);
  1098. MODULE_LICENSE("GPL v2");
  1099. MODULE_DESCRIPTION("Block-Device Target for Open-Channel SSDs");