Merge branch 'for-4.16' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
[sfrench/cifs-2.6.git] / drivers / lightnvm / pblk-recovery.c
1 /*
2  * Copyright (C) 2016 CNEX Labs
3  * Initial: Javier Gonzalez <javier@cnexlabs.com>
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  * pblk-recovery.c - pblk's recovery path
15  */
16
17 #include "pblk.h"
18
19 void pblk_submit_rec(struct work_struct *work)
20 {
21         struct pblk_rec_ctx *recovery =
22                         container_of(work, struct pblk_rec_ctx, ws_rec);
23         struct pblk *pblk = recovery->pblk;
24         struct nvm_tgt_dev *dev = pblk->dev;
25         struct nvm_rq *rqd = recovery->rqd;
26         struct pblk_c_ctx *c_ctx = nvm_rq_to_pdu(rqd);
27         int max_secs = nvm_max_phys_sects(dev);
28         struct bio *bio;
29         unsigned int nr_rec_secs;
30         unsigned int pgs_read;
31         int ret;
32
33         nr_rec_secs = bitmap_weight((unsigned long int *)&rqd->ppa_status,
34                                                                 max_secs);
35
36         bio = bio_alloc(GFP_KERNEL, nr_rec_secs);
37
38         bio->bi_iter.bi_sector = 0;
39         bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
40         rqd->bio = bio;
41         rqd->nr_ppas = nr_rec_secs;
42
43         pgs_read = pblk_rb_read_to_bio_list(&pblk->rwb, bio, &recovery->failed,
44                                                                 nr_rec_secs);
45         if (pgs_read != nr_rec_secs) {
46                 pr_err("pblk: could not read recovery entries\n");
47                 goto err;
48         }
49
50         if (pblk_setup_w_rec_rq(pblk, rqd, c_ctx)) {
51                 pr_err("pblk: could not setup recovery request\n");
52                 goto err;
53         }
54
55 #ifdef CONFIG_NVM_DEBUG
56         atomic_long_add(nr_rec_secs, &pblk->recov_writes);
57 #endif
58
59         ret = pblk_submit_io(pblk, rqd);
60         if (ret) {
61                 pr_err("pblk: I/O submission failed: %d\n", ret);
62                 goto err;
63         }
64
65         mempool_free(recovery, pblk->rec_pool);
66         return;
67
68 err:
69         bio_put(bio);
70         pblk_free_rqd(pblk, rqd, PBLK_WRITE);
71 }
72
73 int pblk_recov_setup_rq(struct pblk *pblk, struct pblk_c_ctx *c_ctx,
74                         struct pblk_rec_ctx *recovery, u64 *comp_bits,
75                         unsigned int comp)
76 {
77         struct nvm_tgt_dev *dev = pblk->dev;
78         int max_secs = nvm_max_phys_sects(dev);
79         struct nvm_rq *rec_rqd;
80         struct pblk_c_ctx *rec_ctx;
81         int nr_entries = c_ctx->nr_valid + c_ctx->nr_padded;
82
83         rec_rqd = pblk_alloc_rqd(pblk, PBLK_WRITE);
84         rec_ctx = nvm_rq_to_pdu(rec_rqd);
85
86         /* Copy completion bitmap, but exclude the first X completed entries */
87         bitmap_shift_right((unsigned long int *)&rec_rqd->ppa_status,
88                                 (unsigned long int *)comp_bits,
89                                 comp, max_secs);
90
91         /* Save the context for the entries that need to be re-written and
92          * update current context with the completed entries.
93          */
94         rec_ctx->sentry = pblk_rb_wrap_pos(&pblk->rwb, c_ctx->sentry + comp);
95         if (comp >= c_ctx->nr_valid) {
96                 rec_ctx->nr_valid = 0;
97                 rec_ctx->nr_padded = nr_entries - comp;
98
99                 c_ctx->nr_padded = comp - c_ctx->nr_valid;
100         } else {
101                 rec_ctx->nr_valid = c_ctx->nr_valid - comp;
102                 rec_ctx->nr_padded = c_ctx->nr_padded;
103
104                 c_ctx->nr_valid = comp;
105                 c_ctx->nr_padded = 0;
106         }
107
108         recovery->rqd = rec_rqd;
109         recovery->pblk = pblk;
110
111         return 0;
112 }
113
114 int pblk_recov_check_emeta(struct pblk *pblk, struct line_emeta *emeta_buf)
115 {
116         u32 crc;
117
118         crc = pblk_calc_emeta_crc(pblk, emeta_buf);
119         if (le32_to_cpu(emeta_buf->crc) != crc)
120                 return 1;
121
122         if (le32_to_cpu(emeta_buf->header.identifier) != PBLK_MAGIC)
123                 return 1;
124
125         return 0;
126 }
127
128 static int pblk_recov_l2p_from_emeta(struct pblk *pblk, struct pblk_line *line)
129 {
130         struct nvm_tgt_dev *dev = pblk->dev;
131         struct nvm_geo *geo = &dev->geo;
132         struct pblk_line_meta *lm = &pblk->lm;
133         struct pblk_emeta *emeta = line->emeta;
134         struct line_emeta *emeta_buf = emeta->buf;
135         __le64 *lba_list;
136         u64 data_start, data_end;
137         u64 nr_valid_lbas, nr_lbas = 0;
138         u64 i;
139
140         lba_list = emeta_to_lbas(pblk, emeta_buf);
141         if (!lba_list)
142                 return 1;
143
144         data_start = pblk_line_smeta_start(pblk, line) + lm->smeta_sec;
145         data_end = line->emeta_ssec;
146         nr_valid_lbas = le64_to_cpu(emeta_buf->nr_valid_lbas);
147
148         for (i = data_start; i < data_end; i++) {
149                 struct ppa_addr ppa;
150                 int pos;
151
152                 ppa = addr_to_gen_ppa(pblk, i, line->id);
153                 pos = pblk_ppa_to_pos(geo, ppa);
154
155                 /* Do not update bad blocks */
156                 if (test_bit(pos, line->blk_bitmap))
157                         continue;
158
159                 if (le64_to_cpu(lba_list[i]) == ADDR_EMPTY) {
160                         spin_lock(&line->lock);
161                         if (test_and_set_bit(i, line->invalid_bitmap))
162                                 WARN_ONCE(1, "pblk: rec. double invalidate:\n");
163                         else
164                                 le32_add_cpu(line->vsc, -1);
165                         spin_unlock(&line->lock);
166
167                         continue;
168                 }
169
170                 pblk_update_map(pblk, le64_to_cpu(lba_list[i]), ppa);
171                 nr_lbas++;
172         }
173
174         if (nr_valid_lbas != nr_lbas)
175                 pr_err("pblk: line %d - inconsistent lba list(%llu/%llu)\n",
176                                 line->id, nr_valid_lbas, nr_lbas);
177
178         line->left_msecs = 0;
179
180         return 0;
181 }
182
183 static int pblk_calc_sec_in_line(struct pblk *pblk, struct pblk_line *line)
184 {
185         struct nvm_tgt_dev *dev = pblk->dev;
186         struct nvm_geo *geo = &dev->geo;
187         struct pblk_line_meta *lm = &pblk->lm;
188         int nr_bb = bitmap_weight(line->blk_bitmap, lm->blk_per_line);
189
190         return lm->sec_per_line - lm->smeta_sec - lm->emeta_sec[0] -
191                                 nr_bb * geo->sec_per_chk;
192 }
193
194 struct pblk_recov_alloc {
195         struct ppa_addr *ppa_list;
196         struct pblk_sec_meta *meta_list;
197         struct nvm_rq *rqd;
198         void *data;
199         dma_addr_t dma_ppa_list;
200         dma_addr_t dma_meta_list;
201 };
202
203 static int pblk_recov_read_oob(struct pblk *pblk, struct pblk_line *line,
204                                struct pblk_recov_alloc p, u64 r_ptr)
205 {
206         struct nvm_tgt_dev *dev = pblk->dev;
207         struct nvm_geo *geo = &dev->geo;
208         struct ppa_addr *ppa_list;
209         struct pblk_sec_meta *meta_list;
210         struct nvm_rq *rqd;
211         struct bio *bio;
212         void *data;
213         dma_addr_t dma_ppa_list, dma_meta_list;
214         u64 r_ptr_int;
215         int left_ppas;
216         int rq_ppas, rq_len;
217         int i, j;
218         int ret = 0;
219
220         ppa_list = p.ppa_list;
221         meta_list = p.meta_list;
222         rqd = p.rqd;
223         data = p.data;
224         dma_ppa_list = p.dma_ppa_list;
225         dma_meta_list = p.dma_meta_list;
226
227         left_ppas = line->cur_sec - r_ptr;
228         if (!left_ppas)
229                 return 0;
230
231         r_ptr_int = r_ptr;
232
233 next_read_rq:
234         memset(rqd, 0, pblk_g_rq_size);
235
236         rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
237         if (!rq_ppas)
238                 rq_ppas = pblk->min_write_pgs;
239         rq_len = rq_ppas * geo->sec_size;
240
241         bio = bio_map_kern(dev->q, data, rq_len, GFP_KERNEL);
242         if (IS_ERR(bio))
243                 return PTR_ERR(bio);
244
245         bio->bi_iter.bi_sector = 0; /* internal bio */
246         bio_set_op_attrs(bio, REQ_OP_READ, 0);
247
248         rqd->bio = bio;
249         rqd->opcode = NVM_OP_PREAD;
250         rqd->meta_list = meta_list;
251         rqd->nr_ppas = rq_ppas;
252         rqd->ppa_list = ppa_list;
253         rqd->dma_ppa_list = dma_ppa_list;
254         rqd->dma_meta_list = dma_meta_list;
255
256         if (pblk_io_aligned(pblk, rq_ppas))
257                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL);
258         else
259                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_RANDOM);
260
261         for (i = 0; i < rqd->nr_ppas; ) {
262                 struct ppa_addr ppa;
263                 int pos;
264
265                 ppa = addr_to_gen_ppa(pblk, r_ptr_int, line->id);
266                 pos = pblk_ppa_to_pos(geo, ppa);
267
268                 while (test_bit(pos, line->blk_bitmap)) {
269                         r_ptr_int += pblk->min_write_pgs;
270                         ppa = addr_to_gen_ppa(pblk, r_ptr_int, line->id);
271                         pos = pblk_ppa_to_pos(geo, ppa);
272                 }
273
274                 for (j = 0; j < pblk->min_write_pgs; j++, i++, r_ptr_int++)
275                         rqd->ppa_list[i] =
276                                 addr_to_gen_ppa(pblk, r_ptr_int, line->id);
277         }
278
279         /* If read fails, more padding is needed */
280         ret = pblk_submit_io_sync(pblk, rqd);
281         if (ret) {
282                 pr_err("pblk: I/O submission failed: %d\n", ret);
283                 return ret;
284         }
285
286         atomic_dec(&pblk->inflight_io);
287
288         /* At this point, the read should not fail. If it does, it is a problem
289          * we cannot recover from here. Need FTL log.
290          */
291         if (rqd->error && rqd->error != NVM_RSP_WARN_HIGHECC) {
292                 pr_err("pblk: L2P recovery failed (%d)\n", rqd->error);
293                 return -EINTR;
294         }
295
296         for (i = 0; i < rqd->nr_ppas; i++) {
297                 u64 lba = le64_to_cpu(meta_list[i].lba);
298
299                 if (lba == ADDR_EMPTY || lba > pblk->rl.nr_secs)
300                         continue;
301
302                 pblk_update_map(pblk, lba, rqd->ppa_list[i]);
303         }
304
305         left_ppas -= rq_ppas;
306         if (left_ppas > 0)
307                 goto next_read_rq;
308
309         return 0;
310 }
311
312 static void pblk_recov_complete(struct kref *ref)
313 {
314         struct pblk_pad_rq *pad_rq = container_of(ref, struct pblk_pad_rq, ref);
315
316         complete(&pad_rq->wait);
317 }
318
319 static void pblk_end_io_recov(struct nvm_rq *rqd)
320 {
321         struct pblk_pad_rq *pad_rq = rqd->private;
322         struct pblk *pblk = pad_rq->pblk;
323
324         pblk_up_page(pblk, rqd->ppa_list, rqd->nr_ppas);
325
326         pblk_free_rqd(pblk, rqd, PBLK_WRITE_INT);
327
328         atomic_dec(&pblk->inflight_io);
329         kref_put(&pad_rq->ref, pblk_recov_complete);
330 }
331
332 static int pblk_recov_pad_oob(struct pblk *pblk, struct pblk_line *line,
333                               int left_ppas)
334 {
335         struct nvm_tgt_dev *dev = pblk->dev;
336         struct nvm_geo *geo = &dev->geo;
337         struct ppa_addr *ppa_list;
338         struct pblk_sec_meta *meta_list;
339         struct pblk_pad_rq *pad_rq;
340         struct nvm_rq *rqd;
341         struct bio *bio;
342         void *data;
343         dma_addr_t dma_ppa_list, dma_meta_list;
344         __le64 *lba_list = emeta_to_lbas(pblk, line->emeta->buf);
345         u64 w_ptr = line->cur_sec;
346         int left_line_ppas, rq_ppas, rq_len;
347         int i, j;
348         int ret = 0;
349
350         spin_lock(&line->lock);
351         left_line_ppas = line->left_msecs;
352         spin_unlock(&line->lock);
353
354         pad_rq = kmalloc(sizeof(struct pblk_pad_rq), GFP_KERNEL);
355         if (!pad_rq)
356                 return -ENOMEM;
357
358         data = vzalloc(pblk->max_write_pgs * geo->sec_size);
359         if (!data) {
360                 ret = -ENOMEM;
361                 goto free_rq;
362         }
363
364         pad_rq->pblk = pblk;
365         init_completion(&pad_rq->wait);
366         kref_init(&pad_rq->ref);
367
368 next_pad_rq:
369         rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
370         if (rq_ppas < pblk->min_write_pgs) {
371                 pr_err("pblk: corrupted pad line %d\n", line->id);
372                 goto fail_free_pad;
373         }
374
375         rq_len = rq_ppas * geo->sec_size;
376
377         meta_list = nvm_dev_dma_alloc(dev->parent, GFP_KERNEL, &dma_meta_list);
378         if (!meta_list) {
379                 ret = -ENOMEM;
380                 goto fail_free_pad;
381         }
382
383         ppa_list = (void *)(meta_list) + pblk_dma_meta_size;
384         dma_ppa_list = dma_meta_list + pblk_dma_meta_size;
385
386         bio = pblk_bio_map_addr(pblk, data, rq_ppas, rq_len,
387                                                 PBLK_VMALLOC_META, GFP_KERNEL);
388         if (IS_ERR(bio)) {
389                 ret = PTR_ERR(bio);
390                 goto fail_free_meta;
391         }
392
393         bio->bi_iter.bi_sector = 0; /* internal bio */
394         bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
395
396         rqd = pblk_alloc_rqd(pblk, PBLK_WRITE_INT);
397
398         rqd->bio = bio;
399         rqd->opcode = NVM_OP_PWRITE;
400         rqd->flags = pblk_set_progr_mode(pblk, PBLK_WRITE);
401         rqd->meta_list = meta_list;
402         rqd->nr_ppas = rq_ppas;
403         rqd->ppa_list = ppa_list;
404         rqd->dma_ppa_list = dma_ppa_list;
405         rqd->dma_meta_list = dma_meta_list;
406         rqd->end_io = pblk_end_io_recov;
407         rqd->private = pad_rq;
408
409         for (i = 0; i < rqd->nr_ppas; ) {
410                 struct ppa_addr ppa;
411                 int pos;
412
413                 w_ptr = pblk_alloc_page(pblk, line, pblk->min_write_pgs);
414                 ppa = addr_to_gen_ppa(pblk, w_ptr, line->id);
415                 pos = pblk_ppa_to_pos(geo, ppa);
416
417                 while (test_bit(pos, line->blk_bitmap)) {
418                         w_ptr += pblk->min_write_pgs;
419                         ppa = addr_to_gen_ppa(pblk, w_ptr, line->id);
420                         pos = pblk_ppa_to_pos(geo, ppa);
421                 }
422
423                 for (j = 0; j < pblk->min_write_pgs; j++, i++, w_ptr++) {
424                         struct ppa_addr dev_ppa;
425                         __le64 addr_empty = cpu_to_le64(ADDR_EMPTY);
426
427                         dev_ppa = addr_to_gen_ppa(pblk, w_ptr, line->id);
428
429                         pblk_map_invalidate(pblk, dev_ppa);
430                         lba_list[w_ptr] = meta_list[i].lba = addr_empty;
431                         rqd->ppa_list[i] = dev_ppa;
432                 }
433         }
434
435         kref_get(&pad_rq->ref);
436         pblk_down_page(pblk, rqd->ppa_list, rqd->nr_ppas);
437
438         ret = pblk_submit_io(pblk, rqd);
439         if (ret) {
440                 pr_err("pblk: I/O submission failed: %d\n", ret);
441                 pblk_up_page(pblk, rqd->ppa_list, rqd->nr_ppas);
442                 goto fail_free_bio;
443         }
444
445         left_line_ppas -= rq_ppas;
446         left_ppas -= rq_ppas;
447         if (left_ppas && left_line_ppas)
448                 goto next_pad_rq;
449
450         kref_put(&pad_rq->ref, pblk_recov_complete);
451
452         if (!wait_for_completion_io_timeout(&pad_rq->wait,
453                                 msecs_to_jiffies(PBLK_COMMAND_TIMEOUT_MS))) {
454                 pr_err("pblk: pad write timed out\n");
455                 ret = -ETIME;
456         }
457
458         if (!pblk_line_is_full(line))
459                 pr_err("pblk: corrupted padded line: %d\n", line->id);
460
461         vfree(data);
462 free_rq:
463         kfree(pad_rq);
464         return ret;
465
466 fail_free_bio:
467         bio_put(bio);
468 fail_free_meta:
469         nvm_dev_dma_free(dev->parent, meta_list, dma_meta_list);
470 fail_free_pad:
471         kfree(pad_rq);
472         vfree(data);
473         return ret;
474 }
475
476 /* When this function is called, it means that not all upper pages have been
477  * written in a page that contains valid data. In order to recover this data, we
478  * first find the write pointer on the device, then we pad all necessary
479  * sectors, and finally attempt to read the valid data
480  */
481 static int pblk_recov_scan_all_oob(struct pblk *pblk, struct pblk_line *line,
482                                    struct pblk_recov_alloc p)
483 {
484         struct nvm_tgt_dev *dev = pblk->dev;
485         struct nvm_geo *geo = &dev->geo;
486         struct ppa_addr *ppa_list;
487         struct pblk_sec_meta *meta_list;
488         struct nvm_rq *rqd;
489         struct bio *bio;
490         void *data;
491         dma_addr_t dma_ppa_list, dma_meta_list;
492         u64 w_ptr = 0, r_ptr;
493         int rq_ppas, rq_len;
494         int i, j;
495         int ret = 0;
496         int rec_round;
497         int left_ppas = pblk_calc_sec_in_line(pblk, line) - line->cur_sec;
498
499         ppa_list = p.ppa_list;
500         meta_list = p.meta_list;
501         rqd = p.rqd;
502         data = p.data;
503         dma_ppa_list = p.dma_ppa_list;
504         dma_meta_list = p.dma_meta_list;
505
506         /* we could recover up until the line write pointer */
507         r_ptr = line->cur_sec;
508         rec_round = 0;
509
510 next_rq:
511         memset(rqd, 0, pblk_g_rq_size);
512
513         rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
514         if (!rq_ppas)
515                 rq_ppas = pblk->min_write_pgs;
516         rq_len = rq_ppas * geo->sec_size;
517
518         bio = bio_map_kern(dev->q, data, rq_len, GFP_KERNEL);
519         if (IS_ERR(bio))
520                 return PTR_ERR(bio);
521
522         bio->bi_iter.bi_sector = 0; /* internal bio */
523         bio_set_op_attrs(bio, REQ_OP_READ, 0);
524
525         rqd->bio = bio;
526         rqd->opcode = NVM_OP_PREAD;
527         rqd->meta_list = meta_list;
528         rqd->nr_ppas = rq_ppas;
529         rqd->ppa_list = ppa_list;
530         rqd->dma_ppa_list = dma_ppa_list;
531         rqd->dma_meta_list = dma_meta_list;
532
533         if (pblk_io_aligned(pblk, rq_ppas))
534                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL);
535         else
536                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_RANDOM);
537
538         for (i = 0; i < rqd->nr_ppas; ) {
539                 struct ppa_addr ppa;
540                 int pos;
541
542                 w_ptr = pblk_alloc_page(pblk, line, pblk->min_write_pgs);
543                 ppa = addr_to_gen_ppa(pblk, w_ptr, line->id);
544                 pos = pblk_ppa_to_pos(geo, ppa);
545
546                 while (test_bit(pos, line->blk_bitmap)) {
547                         w_ptr += pblk->min_write_pgs;
548                         ppa = addr_to_gen_ppa(pblk, w_ptr, line->id);
549                         pos = pblk_ppa_to_pos(geo, ppa);
550                 }
551
552                 for (j = 0; j < pblk->min_write_pgs; j++, i++, w_ptr++)
553                         rqd->ppa_list[i] =
554                                 addr_to_gen_ppa(pblk, w_ptr, line->id);
555         }
556
557         ret = pblk_submit_io_sync(pblk, rqd);
558         if (ret) {
559                 pr_err("pblk: I/O submission failed: %d\n", ret);
560                 return ret;
561         }
562
563         atomic_dec(&pblk->inflight_io);
564
565         /* This should not happen since the read failed during normal recovery,
566          * but the media works funny sometimes...
567          */
568         if (!rec_round++ && !rqd->error) {
569                 rec_round = 0;
570                 for (i = 0; i < rqd->nr_ppas; i++, r_ptr++) {
571                         u64 lba = le64_to_cpu(meta_list[i].lba);
572
573                         if (lba == ADDR_EMPTY || lba > pblk->rl.nr_secs)
574                                 continue;
575
576                         pblk_update_map(pblk, lba, rqd->ppa_list[i]);
577                 }
578         }
579
580         /* Reached the end of the written line */
581         if (rqd->error == NVM_RSP_ERR_EMPTYPAGE) {
582                 int pad_secs, nr_error_bits, bit;
583                 int ret;
584
585                 bit = find_first_bit((void *)&rqd->ppa_status, rqd->nr_ppas);
586                 nr_error_bits = rqd->nr_ppas - bit;
587
588                 /* Roll back failed sectors */
589                 line->cur_sec -= nr_error_bits;
590                 line->left_msecs += nr_error_bits;
591                 bitmap_clear(line->map_bitmap, line->cur_sec, nr_error_bits);
592
593                 pad_secs = pblk_pad_distance(pblk);
594                 if (pad_secs > line->left_msecs)
595                         pad_secs = line->left_msecs;
596
597                 ret = pblk_recov_pad_oob(pblk, line, pad_secs);
598                 if (ret)
599                         pr_err("pblk: OOB padding failed (err:%d)\n", ret);
600
601                 ret = pblk_recov_read_oob(pblk, line, p, r_ptr);
602                 if (ret)
603                         pr_err("pblk: OOB read failed (err:%d)\n", ret);
604
605                 left_ppas = 0;
606         }
607
608         left_ppas -= rq_ppas;
609         if (left_ppas > 0)
610                 goto next_rq;
611
612         return ret;
613 }
614
615 static int pblk_recov_scan_oob(struct pblk *pblk, struct pblk_line *line,
616                                struct pblk_recov_alloc p, int *done)
617 {
618         struct nvm_tgt_dev *dev = pblk->dev;
619         struct nvm_geo *geo = &dev->geo;
620         struct ppa_addr *ppa_list;
621         struct pblk_sec_meta *meta_list;
622         struct nvm_rq *rqd;
623         struct bio *bio;
624         void *data;
625         dma_addr_t dma_ppa_list, dma_meta_list;
626         u64 paddr;
627         int rq_ppas, rq_len;
628         int i, j;
629         int ret = 0;
630         int left_ppas = pblk_calc_sec_in_line(pblk, line);
631
632         ppa_list = p.ppa_list;
633         meta_list = p.meta_list;
634         rqd = p.rqd;
635         data = p.data;
636         dma_ppa_list = p.dma_ppa_list;
637         dma_meta_list = p.dma_meta_list;
638
639         *done = 1;
640
641 next_rq:
642         memset(rqd, 0, pblk_g_rq_size);
643
644         rq_ppas = pblk_calc_secs(pblk, left_ppas, 0);
645         if (!rq_ppas)
646                 rq_ppas = pblk->min_write_pgs;
647         rq_len = rq_ppas * geo->sec_size;
648
649         bio = bio_map_kern(dev->q, data, rq_len, GFP_KERNEL);
650         if (IS_ERR(bio))
651                 return PTR_ERR(bio);
652
653         bio->bi_iter.bi_sector = 0; /* internal bio */
654         bio_set_op_attrs(bio, REQ_OP_READ, 0);
655
656         rqd->bio = bio;
657         rqd->opcode = NVM_OP_PREAD;
658         rqd->meta_list = meta_list;
659         rqd->nr_ppas = rq_ppas;
660         rqd->ppa_list = ppa_list;
661         rqd->dma_ppa_list = dma_ppa_list;
662         rqd->dma_meta_list = dma_meta_list;
663
664         if (pblk_io_aligned(pblk, rq_ppas))
665                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_SEQUENTIAL);
666         else
667                 rqd->flags = pblk_set_read_mode(pblk, PBLK_READ_RANDOM);
668
669         for (i = 0; i < rqd->nr_ppas; ) {
670                 struct ppa_addr ppa;
671                 int pos;
672
673                 paddr = pblk_alloc_page(pblk, line, pblk->min_write_pgs);
674                 ppa = addr_to_gen_ppa(pblk, paddr, line->id);
675                 pos = pblk_ppa_to_pos(geo, ppa);
676
677                 while (test_bit(pos, line->blk_bitmap)) {
678                         paddr += pblk->min_write_pgs;
679                         ppa = addr_to_gen_ppa(pblk, paddr, line->id);
680                         pos = pblk_ppa_to_pos(geo, ppa);
681                 }
682
683                 for (j = 0; j < pblk->min_write_pgs; j++, i++, paddr++)
684                         rqd->ppa_list[i] =
685                                 addr_to_gen_ppa(pblk, paddr, line->id);
686         }
687
688         ret = pblk_submit_io_sync(pblk, rqd);
689         if (ret) {
690                 pr_err("pblk: I/O submission failed: %d\n", ret);
691                 bio_put(bio);
692                 return ret;
693         }
694
695         atomic_dec(&pblk->inflight_io);
696
697         /* Reached the end of the written line */
698         if (rqd->error) {
699                 int nr_error_bits, bit;
700
701                 bit = find_first_bit((void *)&rqd->ppa_status, rqd->nr_ppas);
702                 nr_error_bits = rqd->nr_ppas - bit;
703
704                 /* Roll back failed sectors */
705                 line->cur_sec -= nr_error_bits;
706                 line->left_msecs += nr_error_bits;
707                 bitmap_clear(line->map_bitmap, line->cur_sec, nr_error_bits);
708
709                 left_ppas = 0;
710                 rqd->nr_ppas = bit;
711
712                 if (rqd->error != NVM_RSP_ERR_EMPTYPAGE)
713                         *done = 0;
714         }
715
716         for (i = 0; i < rqd->nr_ppas; i++) {
717                 u64 lba = le64_to_cpu(meta_list[i].lba);
718
719                 if (lba == ADDR_EMPTY || lba > pblk->rl.nr_secs)
720                         continue;
721
722                 pblk_update_map(pblk, lba, rqd->ppa_list[i]);
723         }
724
725         left_ppas -= rq_ppas;
726         if (left_ppas > 0)
727                 goto next_rq;
728
729         return ret;
730 }
731
732 /* Scan line for lbas on out of bound area */
733 static int pblk_recov_l2p_from_oob(struct pblk *pblk, struct pblk_line *line)
734 {
735         struct nvm_tgt_dev *dev = pblk->dev;
736         struct nvm_geo *geo = &dev->geo;
737         struct nvm_rq *rqd;
738         struct ppa_addr *ppa_list;
739         struct pblk_sec_meta *meta_list;
740         struct pblk_recov_alloc p;
741         void *data;
742         dma_addr_t dma_ppa_list, dma_meta_list;
743         int done, ret = 0;
744
745         meta_list = nvm_dev_dma_alloc(dev->parent, GFP_KERNEL, &dma_meta_list);
746         if (!meta_list)
747                 return -ENOMEM;
748
749         ppa_list = (void *)(meta_list) + pblk_dma_meta_size;
750         dma_ppa_list = dma_meta_list + pblk_dma_meta_size;
751
752         data = kcalloc(pblk->max_write_pgs, geo->sec_size, GFP_KERNEL);
753         if (!data) {
754                 ret = -ENOMEM;
755                 goto free_meta_list;
756         }
757
758         rqd = pblk_alloc_rqd(pblk, PBLK_READ);
759
760         p.ppa_list = ppa_list;
761         p.meta_list = meta_list;
762         p.rqd = rqd;
763         p.data = data;
764         p.dma_ppa_list = dma_ppa_list;
765         p.dma_meta_list = dma_meta_list;
766
767         ret = pblk_recov_scan_oob(pblk, line, p, &done);
768         if (ret) {
769                 pr_err("pblk: could not recover L2P from OOB\n");
770                 goto out;
771         }
772
773         if (!done) {
774                 ret = pblk_recov_scan_all_oob(pblk, line, p);
775                 if (ret) {
776                         pr_err("pblk: could not recover L2P from OOB\n");
777                         goto out;
778                 }
779         }
780
781         if (pblk_line_is_full(line))
782                 pblk_line_recov_close(pblk, line);
783
784 out:
785         kfree(data);
786 free_meta_list:
787         nvm_dev_dma_free(dev->parent, meta_list, dma_meta_list);
788
789         return ret;
790 }
791
792 /* Insert lines ordered by sequence number (seq_num) on list */
793 static void pblk_recov_line_add_ordered(struct list_head *head,
794                                         struct pblk_line *line)
795 {
796         struct pblk_line *t = NULL;
797
798         list_for_each_entry(t, head, list)
799                 if (t->seq_nr > line->seq_nr)
800                         break;
801
802         __list_add(&line->list, t->list.prev, &t->list);
803 }
804
805 static u64 pblk_line_emeta_start(struct pblk *pblk, struct pblk_line *line)
806 {
807         struct nvm_tgt_dev *dev = pblk->dev;
808         struct nvm_geo *geo = &dev->geo;
809         struct pblk_line_meta *lm = &pblk->lm;
810         unsigned int emeta_secs;
811         u64 emeta_start;
812         struct ppa_addr ppa;
813         int pos;
814
815         emeta_secs = lm->emeta_sec[0];
816         emeta_start = lm->sec_per_line;
817
818         while (emeta_secs) {
819                 emeta_start--;
820                 ppa = addr_to_gen_ppa(pblk, emeta_start, line->id);
821                 pos = pblk_ppa_to_pos(geo, ppa);
822                 if (!test_bit(pos, line->blk_bitmap))
823                         emeta_secs--;
824         }
825
826         return emeta_start;
827 }
828
829 struct pblk_line *pblk_recov_l2p(struct pblk *pblk)
830 {
831         struct pblk_line_meta *lm = &pblk->lm;
832         struct pblk_line_mgmt *l_mg = &pblk->l_mg;
833         struct pblk_line *line, *tline, *data_line = NULL;
834         struct pblk_smeta *smeta;
835         struct pblk_emeta *emeta;
836         struct line_smeta *smeta_buf;
837         int found_lines = 0, recovered_lines = 0, open_lines = 0;
838         int is_next = 0;
839         int meta_line;
840         int i, valid_uuid = 0;
841         LIST_HEAD(recov_list);
842
843         /* TODO: Implement FTL snapshot */
844
845         /* Scan recovery - takes place when FTL snapshot fails */
846         spin_lock(&l_mg->free_lock);
847         meta_line = find_first_zero_bit(&l_mg->meta_bitmap, PBLK_DATA_LINES);
848         set_bit(meta_line, &l_mg->meta_bitmap);
849         smeta = l_mg->sline_meta[meta_line];
850         emeta = l_mg->eline_meta[meta_line];
851         smeta_buf = (struct line_smeta *)smeta;
852         spin_unlock(&l_mg->free_lock);
853
854         /* Order data lines using their sequence number */
855         for (i = 0; i < l_mg->nr_lines; i++) {
856                 u32 crc;
857
858                 line = &pblk->lines[i];
859
860                 memset(smeta, 0, lm->smeta_len);
861                 line->smeta = smeta;
862                 line->lun_bitmap = ((void *)(smeta_buf)) +
863                                                 sizeof(struct line_smeta);
864
865                 /* Lines that cannot be read are assumed as not written here */
866                 if (pblk_line_read_smeta(pblk, line))
867                         continue;
868
869                 crc = pblk_calc_smeta_crc(pblk, smeta_buf);
870                 if (le32_to_cpu(smeta_buf->crc) != crc)
871                         continue;
872
873                 if (le32_to_cpu(smeta_buf->header.identifier) != PBLK_MAGIC)
874                         continue;
875
876                 if (smeta_buf->header.version != SMETA_VERSION) {
877                         pr_err("pblk: found incompatible line version %u\n",
878                                         le16_to_cpu(smeta_buf->header.version));
879                         return ERR_PTR(-EINVAL);
880                 }
881
882                 /* The first valid instance uuid is used for initialization */
883                 if (!valid_uuid) {
884                         memcpy(pblk->instance_uuid, smeta_buf->header.uuid, 16);
885                         valid_uuid = 1;
886                 }
887
888                 if (memcmp(pblk->instance_uuid, smeta_buf->header.uuid, 16)) {
889                         pr_debug("pblk: ignore line %u due to uuid mismatch\n",
890                                         i);
891                         continue;
892                 }
893
894                 /* Update line metadata */
895                 spin_lock(&line->lock);
896                 line->id = le32_to_cpu(smeta_buf->header.id);
897                 line->type = le16_to_cpu(smeta_buf->header.type);
898                 line->seq_nr = le64_to_cpu(smeta_buf->seq_nr);
899                 spin_unlock(&line->lock);
900
901                 /* Update general metadata */
902                 spin_lock(&l_mg->free_lock);
903                 if (line->seq_nr >= l_mg->d_seq_nr)
904                         l_mg->d_seq_nr = line->seq_nr + 1;
905                 l_mg->nr_free_lines--;
906                 spin_unlock(&l_mg->free_lock);
907
908                 if (pblk_line_recov_alloc(pblk, line))
909                         goto out;
910
911                 pblk_recov_line_add_ordered(&recov_list, line);
912                 found_lines++;
913                 pr_debug("pblk: recovering data line %d, seq:%llu\n",
914                                                 line->id, smeta_buf->seq_nr);
915         }
916
917         if (!found_lines) {
918                 pblk_setup_uuid(pblk);
919
920                 spin_lock(&l_mg->free_lock);
921                 WARN_ON_ONCE(!test_and_clear_bit(meta_line,
922                                                         &l_mg->meta_bitmap));
923                 spin_unlock(&l_mg->free_lock);
924
925                 goto out;
926         }
927
928         /* Verify closed blocks and recover this portion of L2P table*/
929         list_for_each_entry_safe(line, tline, &recov_list, list) {
930                 recovered_lines++;
931
932                 line->emeta_ssec = pblk_line_emeta_start(pblk, line);
933                 line->emeta = emeta;
934                 memset(line->emeta->buf, 0, lm->emeta_len[0]);
935
936                 if (pblk_line_read_emeta(pblk, line, line->emeta->buf)) {
937                         pblk_recov_l2p_from_oob(pblk, line);
938                         goto next;
939                 }
940
941                 if (pblk_recov_check_emeta(pblk, line->emeta->buf)) {
942                         pblk_recov_l2p_from_oob(pblk, line);
943                         goto next;
944                 }
945
946                 if (pblk_recov_l2p_from_emeta(pblk, line))
947                         pblk_recov_l2p_from_oob(pblk, line);
948
949 next:
950                 if (pblk_line_is_full(line)) {
951                         struct list_head *move_list;
952
953                         spin_lock(&line->lock);
954                         line->state = PBLK_LINESTATE_CLOSED;
955                         move_list = pblk_line_gc_list(pblk, line);
956                         spin_unlock(&line->lock);
957
958                         spin_lock(&l_mg->gc_lock);
959                         list_move_tail(&line->list, move_list);
960                         spin_unlock(&l_mg->gc_lock);
961
962                         kfree(line->map_bitmap);
963                         line->map_bitmap = NULL;
964                         line->smeta = NULL;
965                         line->emeta = NULL;
966                 } else {
967                         if (open_lines > 1)
968                                 pr_err("pblk: failed to recover L2P\n");
969
970                         open_lines++;
971                         line->meta_line = meta_line;
972                         data_line = line;
973                 }
974         }
975
976         spin_lock(&l_mg->free_lock);
977         if (!open_lines) {
978                 WARN_ON_ONCE(!test_and_clear_bit(meta_line,
979                                                         &l_mg->meta_bitmap));
980                 pblk_line_replace_data(pblk);
981         } else {
982                 /* Allocate next line for preparation */
983                 l_mg->data_next = pblk_line_get(pblk);
984                 if (l_mg->data_next) {
985                         l_mg->data_next->seq_nr = l_mg->d_seq_nr++;
986                         l_mg->data_next->type = PBLK_LINETYPE_DATA;
987                         is_next = 1;
988                 }
989         }
990         spin_unlock(&l_mg->free_lock);
991
992         if (is_next)
993                 pblk_line_erase(pblk, l_mg->data_next);
994
995 out:
996         if (found_lines != recovered_lines)
997                 pr_err("pblk: failed to recover all found lines %d/%d\n",
998                                                 found_lines, recovered_lines);
999
1000         return data_line;
1001 }
1002
1003 /*
1004  * Pad current line
1005  */
1006 int pblk_recov_pad(struct pblk *pblk)
1007 {
1008         struct pblk_line *line;
1009         struct pblk_line_mgmt *l_mg = &pblk->l_mg;
1010         int left_msecs;
1011         int ret = 0;
1012
1013         spin_lock(&l_mg->free_lock);
1014         line = l_mg->data_line;
1015         left_msecs = line->left_msecs;
1016         spin_unlock(&l_mg->free_lock);
1017
1018         ret = pblk_recov_pad_oob(pblk, line, left_msecs);
1019         if (ret) {
1020                 pr_err("pblk: Tear down padding failed (%d)\n", ret);
1021                 return ret;
1022         }
1023
1024         pblk_line_close_meta(pblk, line);
1025         return ret;
1026 }