]> Git Repo - linux.git/blob - fs/btrfs/raid56.c
btrfs: reduce div64 calls by limiting the number of stripes of a chunk to u32
[linux.git] / fs / btrfs / raid56.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2012 Fusion-io  All rights reserved.
4  * Copyright (C) 2012 Intel Corp. All rights reserved.
5  */
6
7 #include <linux/sched.h>
8 #include <linux/bio.h>
9 #include <linux/slab.h>
10 #include <linux/blkdev.h>
11 #include <linux/raid/pq.h>
12 #include <linux/hash.h>
13 #include <linux/list_sort.h>
14 #include <linux/raid/xor.h>
15 #include <linux/mm.h>
16 #include "messages.h"
17 #include "misc.h"
18 #include "ctree.h"
19 #include "disk-io.h"
20 #include "volumes.h"
21 #include "raid56.h"
22 #include "async-thread.h"
23 #include "file-item.h"
24 #include "btrfs_inode.h"
25
26 /* set when additional merges to this rbio are not allowed */
27 #define RBIO_RMW_LOCKED_BIT     1
28
29 /*
30  * set when this rbio is sitting in the hash, but it is just a cache
31  * of past RMW
32  */
33 #define RBIO_CACHE_BIT          2
34
35 /*
36  * set when it is safe to trust the stripe_pages for caching
37  */
38 #define RBIO_CACHE_READY_BIT    3
39
40 #define RBIO_CACHE_SIZE 1024
41
42 #define BTRFS_STRIPE_HASH_TABLE_BITS                            11
43
44 /* Used by the raid56 code to lock stripes for read/modify/write */
45 struct btrfs_stripe_hash {
46         struct list_head hash_list;
47         spinlock_t lock;
48 };
49
50 /* Used by the raid56 code to lock stripes for read/modify/write */
51 struct btrfs_stripe_hash_table {
52         struct list_head stripe_cache;
53         spinlock_t cache_lock;
54         int cache_size;
55         struct btrfs_stripe_hash table[];
56 };
57
58 /*
59  * A bvec like structure to present a sector inside a page.
60  *
61  * Unlike bvec we don't need bvlen, as it's fixed to sectorsize.
62  */
63 struct sector_ptr {
64         struct page *page;
65         unsigned int pgoff:24;
66         unsigned int uptodate:8;
67 };
68
69 static void rmw_rbio_work(struct work_struct *work);
70 static void rmw_rbio_work_locked(struct work_struct *work);
71 static void index_rbio_pages(struct btrfs_raid_bio *rbio);
72 static int alloc_rbio_pages(struct btrfs_raid_bio *rbio);
73
74 static int finish_parity_scrub(struct btrfs_raid_bio *rbio, int need_check);
75 static void scrub_rbio_work_locked(struct work_struct *work);
76
77 static void free_raid_bio_pointers(struct btrfs_raid_bio *rbio)
78 {
79         bitmap_free(rbio->error_bitmap);
80         kfree(rbio->stripe_pages);
81         kfree(rbio->bio_sectors);
82         kfree(rbio->stripe_sectors);
83         kfree(rbio->finish_pointers);
84 }
85
86 static void free_raid_bio(struct btrfs_raid_bio *rbio)
87 {
88         int i;
89
90         if (!refcount_dec_and_test(&rbio->refs))
91                 return;
92
93         WARN_ON(!list_empty(&rbio->stripe_cache));
94         WARN_ON(!list_empty(&rbio->hash_list));
95         WARN_ON(!bio_list_empty(&rbio->bio_list));
96
97         for (i = 0; i < rbio->nr_pages; i++) {
98                 if (rbio->stripe_pages[i]) {
99                         __free_page(rbio->stripe_pages[i]);
100                         rbio->stripe_pages[i] = NULL;
101                 }
102         }
103
104         btrfs_put_bioc(rbio->bioc);
105         free_raid_bio_pointers(rbio);
106         kfree(rbio);
107 }
108
109 static void start_async_work(struct btrfs_raid_bio *rbio, work_func_t work_func)
110 {
111         INIT_WORK(&rbio->work, work_func);
112         queue_work(rbio->bioc->fs_info->rmw_workers, &rbio->work);
113 }
114
115 /*
116  * the stripe hash table is used for locking, and to collect
117  * bios in hopes of making a full stripe
118  */
119 int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info)
120 {
121         struct btrfs_stripe_hash_table *table;
122         struct btrfs_stripe_hash_table *x;
123         struct btrfs_stripe_hash *cur;
124         struct btrfs_stripe_hash *h;
125         int num_entries = 1 << BTRFS_STRIPE_HASH_TABLE_BITS;
126         int i;
127
128         if (info->stripe_hash_table)
129                 return 0;
130
131         /*
132          * The table is large, starting with order 4 and can go as high as
133          * order 7 in case lock debugging is turned on.
134          *
135          * Try harder to allocate and fallback to vmalloc to lower the chance
136          * of a failing mount.
137          */
138         table = kvzalloc(struct_size(table, table, num_entries), GFP_KERNEL);
139         if (!table)
140                 return -ENOMEM;
141
142         spin_lock_init(&table->cache_lock);
143         INIT_LIST_HEAD(&table->stripe_cache);
144
145         h = table->table;
146
147         for (i = 0; i < num_entries; i++) {
148                 cur = h + i;
149                 INIT_LIST_HEAD(&cur->hash_list);
150                 spin_lock_init(&cur->lock);
151         }
152
153         x = cmpxchg(&info->stripe_hash_table, NULL, table);
154         kvfree(x);
155         return 0;
156 }
157
158 /*
159  * caching an rbio means to copy anything from the
160  * bio_sectors array into the stripe_pages array.  We
161  * use the page uptodate bit in the stripe cache array
162  * to indicate if it has valid data
163  *
164  * once the caching is done, we set the cache ready
165  * bit.
166  */
167 static void cache_rbio_pages(struct btrfs_raid_bio *rbio)
168 {
169         int i;
170         int ret;
171
172         ret = alloc_rbio_pages(rbio);
173         if (ret)
174                 return;
175
176         for (i = 0; i < rbio->nr_sectors; i++) {
177                 /* Some range not covered by bio (partial write), skip it */
178                 if (!rbio->bio_sectors[i].page) {
179                         /*
180                          * Even if the sector is not covered by bio, if it is
181                          * a data sector it should still be uptodate as it is
182                          * read from disk.
183                          */
184                         if (i < rbio->nr_data * rbio->stripe_nsectors)
185                                 ASSERT(rbio->stripe_sectors[i].uptodate);
186                         continue;
187                 }
188
189                 ASSERT(rbio->stripe_sectors[i].page);
190                 memcpy_page(rbio->stripe_sectors[i].page,
191                             rbio->stripe_sectors[i].pgoff,
192                             rbio->bio_sectors[i].page,
193                             rbio->bio_sectors[i].pgoff,
194                             rbio->bioc->fs_info->sectorsize);
195                 rbio->stripe_sectors[i].uptodate = 1;
196         }
197         set_bit(RBIO_CACHE_READY_BIT, &rbio->flags);
198 }
199
200 /*
201  * we hash on the first logical address of the stripe
202  */
203 static int rbio_bucket(struct btrfs_raid_bio *rbio)
204 {
205         u64 num = rbio->bioc->raid_map[0];
206
207         /*
208          * we shift down quite a bit.  We're using byte
209          * addressing, and most of the lower bits are zeros.
210          * This tends to upset hash_64, and it consistently
211          * returns just one or two different values.
212          *
213          * shifting off the lower bits fixes things.
214          */
215         return hash_64(num >> 16, BTRFS_STRIPE_HASH_TABLE_BITS);
216 }
217
218 static bool full_page_sectors_uptodate(struct btrfs_raid_bio *rbio,
219                                        unsigned int page_nr)
220 {
221         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
222         const u32 sectors_per_page = PAGE_SIZE / sectorsize;
223         int i;
224
225         ASSERT(page_nr < rbio->nr_pages);
226
227         for (i = sectors_per_page * page_nr;
228              i < sectors_per_page * page_nr + sectors_per_page;
229              i++) {
230                 if (!rbio->stripe_sectors[i].uptodate)
231                         return false;
232         }
233         return true;
234 }
235
236 /*
237  * Update the stripe_sectors[] array to use correct page and pgoff
238  *
239  * Should be called every time any page pointer in stripes_pages[] got modified.
240  */
241 static void index_stripe_sectors(struct btrfs_raid_bio *rbio)
242 {
243         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
244         u32 offset;
245         int i;
246
247         for (i = 0, offset = 0; i < rbio->nr_sectors; i++, offset += sectorsize) {
248                 int page_index = offset >> PAGE_SHIFT;
249
250                 ASSERT(page_index < rbio->nr_pages);
251                 rbio->stripe_sectors[i].page = rbio->stripe_pages[page_index];
252                 rbio->stripe_sectors[i].pgoff = offset_in_page(offset);
253         }
254 }
255
256 static void steal_rbio_page(struct btrfs_raid_bio *src,
257                             struct btrfs_raid_bio *dest, int page_nr)
258 {
259         const u32 sectorsize = src->bioc->fs_info->sectorsize;
260         const u32 sectors_per_page = PAGE_SIZE / sectorsize;
261         int i;
262
263         if (dest->stripe_pages[page_nr])
264                 __free_page(dest->stripe_pages[page_nr]);
265         dest->stripe_pages[page_nr] = src->stripe_pages[page_nr];
266         src->stripe_pages[page_nr] = NULL;
267
268         /* Also update the sector->uptodate bits. */
269         for (i = sectors_per_page * page_nr;
270              i < sectors_per_page * page_nr + sectors_per_page; i++)
271                 dest->stripe_sectors[i].uptodate = true;
272 }
273
274 static bool is_data_stripe_page(struct btrfs_raid_bio *rbio, int page_nr)
275 {
276         const int sector_nr = (page_nr << PAGE_SHIFT) >>
277                               rbio->bioc->fs_info->sectorsize_bits;
278
279         /*
280          * We have ensured PAGE_SIZE is aligned with sectorsize, thus
281          * we won't have a page which is half data half parity.
282          *
283          * Thus if the first sector of the page belongs to data stripes, then
284          * the full page belongs to data stripes.
285          */
286         return (sector_nr < rbio->nr_data * rbio->stripe_nsectors);
287 }
288
289 /*
290  * Stealing an rbio means taking all the uptodate pages from the stripe array
291  * in the source rbio and putting them into the destination rbio.
292  *
293  * This will also update the involved stripe_sectors[] which are referring to
294  * the old pages.
295  */
296 static void steal_rbio(struct btrfs_raid_bio *src, struct btrfs_raid_bio *dest)
297 {
298         int i;
299
300         if (!test_bit(RBIO_CACHE_READY_BIT, &src->flags))
301                 return;
302
303         for (i = 0; i < dest->nr_pages; i++) {
304                 struct page *p = src->stripe_pages[i];
305
306                 /*
307                  * We don't need to steal P/Q pages as they will always be
308                  * regenerated for RMW or full write anyway.
309                  */
310                 if (!is_data_stripe_page(src, i))
311                         continue;
312
313                 /*
314                  * If @src already has RBIO_CACHE_READY_BIT, it should have
315                  * all data stripe pages present and uptodate.
316                  */
317                 ASSERT(p);
318                 ASSERT(full_page_sectors_uptodate(src, i));
319                 steal_rbio_page(src, dest, i);
320         }
321         index_stripe_sectors(dest);
322         index_stripe_sectors(src);
323 }
324
325 /*
326  * merging means we take the bio_list from the victim and
327  * splice it into the destination.  The victim should
328  * be discarded afterwards.
329  *
330  * must be called with dest->rbio_list_lock held
331  */
332 static void merge_rbio(struct btrfs_raid_bio *dest,
333                        struct btrfs_raid_bio *victim)
334 {
335         bio_list_merge(&dest->bio_list, &victim->bio_list);
336         dest->bio_list_bytes += victim->bio_list_bytes;
337         /* Also inherit the bitmaps from @victim. */
338         bitmap_or(&dest->dbitmap, &victim->dbitmap, &dest->dbitmap,
339                   dest->stripe_nsectors);
340         bio_list_init(&victim->bio_list);
341 }
342
343 /*
344  * used to prune items that are in the cache.  The caller
345  * must hold the hash table lock.
346  */
347 static void __remove_rbio_from_cache(struct btrfs_raid_bio *rbio)
348 {
349         int bucket = rbio_bucket(rbio);
350         struct btrfs_stripe_hash_table *table;
351         struct btrfs_stripe_hash *h;
352         int freeit = 0;
353
354         /*
355          * check the bit again under the hash table lock.
356          */
357         if (!test_bit(RBIO_CACHE_BIT, &rbio->flags))
358                 return;
359
360         table = rbio->bioc->fs_info->stripe_hash_table;
361         h = table->table + bucket;
362
363         /* hold the lock for the bucket because we may be
364          * removing it from the hash table
365          */
366         spin_lock(&h->lock);
367
368         /*
369          * hold the lock for the bio list because we need
370          * to make sure the bio list is empty
371          */
372         spin_lock(&rbio->bio_list_lock);
373
374         if (test_and_clear_bit(RBIO_CACHE_BIT, &rbio->flags)) {
375                 list_del_init(&rbio->stripe_cache);
376                 table->cache_size -= 1;
377                 freeit = 1;
378
379                 /* if the bio list isn't empty, this rbio is
380                  * still involved in an IO.  We take it out
381                  * of the cache list, and drop the ref that
382                  * was held for the list.
383                  *
384                  * If the bio_list was empty, we also remove
385                  * the rbio from the hash_table, and drop
386                  * the corresponding ref
387                  */
388                 if (bio_list_empty(&rbio->bio_list)) {
389                         if (!list_empty(&rbio->hash_list)) {
390                                 list_del_init(&rbio->hash_list);
391                                 refcount_dec(&rbio->refs);
392                                 BUG_ON(!list_empty(&rbio->plug_list));
393                         }
394                 }
395         }
396
397         spin_unlock(&rbio->bio_list_lock);
398         spin_unlock(&h->lock);
399
400         if (freeit)
401                 free_raid_bio(rbio);
402 }
403
404 /*
405  * prune a given rbio from the cache
406  */
407 static void remove_rbio_from_cache(struct btrfs_raid_bio *rbio)
408 {
409         struct btrfs_stripe_hash_table *table;
410
411         if (!test_bit(RBIO_CACHE_BIT, &rbio->flags))
412                 return;
413
414         table = rbio->bioc->fs_info->stripe_hash_table;
415
416         spin_lock(&table->cache_lock);
417         __remove_rbio_from_cache(rbio);
418         spin_unlock(&table->cache_lock);
419 }
420
421 /*
422  * remove everything in the cache
423  */
424 static void btrfs_clear_rbio_cache(struct btrfs_fs_info *info)
425 {
426         struct btrfs_stripe_hash_table *table;
427         struct btrfs_raid_bio *rbio;
428
429         table = info->stripe_hash_table;
430
431         spin_lock(&table->cache_lock);
432         while (!list_empty(&table->stripe_cache)) {
433                 rbio = list_entry(table->stripe_cache.next,
434                                   struct btrfs_raid_bio,
435                                   stripe_cache);
436                 __remove_rbio_from_cache(rbio);
437         }
438         spin_unlock(&table->cache_lock);
439 }
440
441 /*
442  * remove all cached entries and free the hash table
443  * used by unmount
444  */
445 void btrfs_free_stripe_hash_table(struct btrfs_fs_info *info)
446 {
447         if (!info->stripe_hash_table)
448                 return;
449         btrfs_clear_rbio_cache(info);
450         kvfree(info->stripe_hash_table);
451         info->stripe_hash_table = NULL;
452 }
453
454 /*
455  * insert an rbio into the stripe cache.  It
456  * must have already been prepared by calling
457  * cache_rbio_pages
458  *
459  * If this rbio was already cached, it gets
460  * moved to the front of the lru.
461  *
462  * If the size of the rbio cache is too big, we
463  * prune an item.
464  */
465 static void cache_rbio(struct btrfs_raid_bio *rbio)
466 {
467         struct btrfs_stripe_hash_table *table;
468
469         if (!test_bit(RBIO_CACHE_READY_BIT, &rbio->flags))
470                 return;
471
472         table = rbio->bioc->fs_info->stripe_hash_table;
473
474         spin_lock(&table->cache_lock);
475         spin_lock(&rbio->bio_list_lock);
476
477         /* bump our ref if we were not in the list before */
478         if (!test_and_set_bit(RBIO_CACHE_BIT, &rbio->flags))
479                 refcount_inc(&rbio->refs);
480
481         if (!list_empty(&rbio->stripe_cache)){
482                 list_move(&rbio->stripe_cache, &table->stripe_cache);
483         } else {
484                 list_add(&rbio->stripe_cache, &table->stripe_cache);
485                 table->cache_size += 1;
486         }
487
488         spin_unlock(&rbio->bio_list_lock);
489
490         if (table->cache_size > RBIO_CACHE_SIZE) {
491                 struct btrfs_raid_bio *found;
492
493                 found = list_entry(table->stripe_cache.prev,
494                                   struct btrfs_raid_bio,
495                                   stripe_cache);
496
497                 if (found != rbio)
498                         __remove_rbio_from_cache(found);
499         }
500
501         spin_unlock(&table->cache_lock);
502 }
503
504 /*
505  * helper function to run the xor_blocks api.  It is only
506  * able to do MAX_XOR_BLOCKS at a time, so we need to
507  * loop through.
508  */
509 static void run_xor(void **pages, int src_cnt, ssize_t len)
510 {
511         int src_off = 0;
512         int xor_src_cnt = 0;
513         void *dest = pages[src_cnt];
514
515         while(src_cnt > 0) {
516                 xor_src_cnt = min(src_cnt, MAX_XOR_BLOCKS);
517                 xor_blocks(xor_src_cnt, len, dest, pages + src_off);
518
519                 src_cnt -= xor_src_cnt;
520                 src_off += xor_src_cnt;
521         }
522 }
523
524 /*
525  * Returns true if the bio list inside this rbio covers an entire stripe (no
526  * rmw required).
527  */
528 static int rbio_is_full(struct btrfs_raid_bio *rbio)
529 {
530         unsigned long size = rbio->bio_list_bytes;
531         int ret = 1;
532
533         spin_lock(&rbio->bio_list_lock);
534         if (size != rbio->nr_data * BTRFS_STRIPE_LEN)
535                 ret = 0;
536         BUG_ON(size > rbio->nr_data * BTRFS_STRIPE_LEN);
537         spin_unlock(&rbio->bio_list_lock);
538
539         return ret;
540 }
541
542 /*
543  * returns 1 if it is safe to merge two rbios together.
544  * The merging is safe if the two rbios correspond to
545  * the same stripe and if they are both going in the same
546  * direction (read vs write), and if neither one is
547  * locked for final IO
548  *
549  * The caller is responsible for locking such that
550  * rmw_locked is safe to test
551  */
552 static int rbio_can_merge(struct btrfs_raid_bio *last,
553                           struct btrfs_raid_bio *cur)
554 {
555         if (test_bit(RBIO_RMW_LOCKED_BIT, &last->flags) ||
556             test_bit(RBIO_RMW_LOCKED_BIT, &cur->flags))
557                 return 0;
558
559         /*
560          * we can't merge with cached rbios, since the
561          * idea is that when we merge the destination
562          * rbio is going to run our IO for us.  We can
563          * steal from cached rbios though, other functions
564          * handle that.
565          */
566         if (test_bit(RBIO_CACHE_BIT, &last->flags) ||
567             test_bit(RBIO_CACHE_BIT, &cur->flags))
568                 return 0;
569
570         if (last->bioc->raid_map[0] != cur->bioc->raid_map[0])
571                 return 0;
572
573         /* we can't merge with different operations */
574         if (last->operation != cur->operation)
575                 return 0;
576         /*
577          * We've need read the full stripe from the drive.
578          * check and repair the parity and write the new results.
579          *
580          * We're not allowed to add any new bios to the
581          * bio list here, anyone else that wants to
582          * change this stripe needs to do their own rmw.
583          */
584         if (last->operation == BTRFS_RBIO_PARITY_SCRUB)
585                 return 0;
586
587         if (last->operation == BTRFS_RBIO_REBUILD_MISSING ||
588             last->operation == BTRFS_RBIO_READ_REBUILD)
589                 return 0;
590
591         return 1;
592 }
593
594 static unsigned int rbio_stripe_sector_index(const struct btrfs_raid_bio *rbio,
595                                              unsigned int stripe_nr,
596                                              unsigned int sector_nr)
597 {
598         ASSERT(stripe_nr < rbio->real_stripes);
599         ASSERT(sector_nr < rbio->stripe_nsectors);
600
601         return stripe_nr * rbio->stripe_nsectors + sector_nr;
602 }
603
604 /* Return a sector from rbio->stripe_sectors, not from the bio list */
605 static struct sector_ptr *rbio_stripe_sector(const struct btrfs_raid_bio *rbio,
606                                              unsigned int stripe_nr,
607                                              unsigned int sector_nr)
608 {
609         return &rbio->stripe_sectors[rbio_stripe_sector_index(rbio, stripe_nr,
610                                                               sector_nr)];
611 }
612
613 /* Grab a sector inside P stripe */
614 static struct sector_ptr *rbio_pstripe_sector(const struct btrfs_raid_bio *rbio,
615                                               unsigned int sector_nr)
616 {
617         return rbio_stripe_sector(rbio, rbio->nr_data, sector_nr);
618 }
619
620 /* Grab a sector inside Q stripe, return NULL if not RAID6 */
621 static struct sector_ptr *rbio_qstripe_sector(const struct btrfs_raid_bio *rbio,
622                                               unsigned int sector_nr)
623 {
624         if (rbio->nr_data + 1 == rbio->real_stripes)
625                 return NULL;
626         return rbio_stripe_sector(rbio, rbio->nr_data + 1, sector_nr);
627 }
628
629 /*
630  * The first stripe in the table for a logical address
631  * has the lock.  rbios are added in one of three ways:
632  *
633  * 1) Nobody has the stripe locked yet.  The rbio is given
634  * the lock and 0 is returned.  The caller must start the IO
635  * themselves.
636  *
637  * 2) Someone has the stripe locked, but we're able to merge
638  * with the lock owner.  The rbio is freed and the IO will
639  * start automatically along with the existing rbio.  1 is returned.
640  *
641  * 3) Someone has the stripe locked, but we're not able to merge.
642  * The rbio is added to the lock owner's plug list, or merged into
643  * an rbio already on the plug list.  When the lock owner unlocks,
644  * the next rbio on the list is run and the IO is started automatically.
645  * 1 is returned
646  *
647  * If we return 0, the caller still owns the rbio and must continue with
648  * IO submission.  If we return 1, the caller must assume the rbio has
649  * already been freed.
650  */
651 static noinline int lock_stripe_add(struct btrfs_raid_bio *rbio)
652 {
653         struct btrfs_stripe_hash *h;
654         struct btrfs_raid_bio *cur;
655         struct btrfs_raid_bio *pending;
656         struct btrfs_raid_bio *freeit = NULL;
657         struct btrfs_raid_bio *cache_drop = NULL;
658         int ret = 0;
659
660         h = rbio->bioc->fs_info->stripe_hash_table->table + rbio_bucket(rbio);
661
662         spin_lock(&h->lock);
663         list_for_each_entry(cur, &h->hash_list, hash_list) {
664                 if (cur->bioc->raid_map[0] != rbio->bioc->raid_map[0])
665                         continue;
666
667                 spin_lock(&cur->bio_list_lock);
668
669                 /* Can we steal this cached rbio's pages? */
670                 if (bio_list_empty(&cur->bio_list) &&
671                     list_empty(&cur->plug_list) &&
672                     test_bit(RBIO_CACHE_BIT, &cur->flags) &&
673                     !test_bit(RBIO_RMW_LOCKED_BIT, &cur->flags)) {
674                         list_del_init(&cur->hash_list);
675                         refcount_dec(&cur->refs);
676
677                         steal_rbio(cur, rbio);
678                         cache_drop = cur;
679                         spin_unlock(&cur->bio_list_lock);
680
681                         goto lockit;
682                 }
683
684                 /* Can we merge into the lock owner? */
685                 if (rbio_can_merge(cur, rbio)) {
686                         merge_rbio(cur, rbio);
687                         spin_unlock(&cur->bio_list_lock);
688                         freeit = rbio;
689                         ret = 1;
690                         goto out;
691                 }
692
693
694                 /*
695                  * We couldn't merge with the running rbio, see if we can merge
696                  * with the pending ones.  We don't have to check for rmw_locked
697                  * because there is no way they are inside finish_rmw right now
698                  */
699                 list_for_each_entry(pending, &cur->plug_list, plug_list) {
700                         if (rbio_can_merge(pending, rbio)) {
701                                 merge_rbio(pending, rbio);
702                                 spin_unlock(&cur->bio_list_lock);
703                                 freeit = rbio;
704                                 ret = 1;
705                                 goto out;
706                         }
707                 }
708
709                 /*
710                  * No merging, put us on the tail of the plug list, our rbio
711                  * will be started with the currently running rbio unlocks
712                  */
713                 list_add_tail(&rbio->plug_list, &cur->plug_list);
714                 spin_unlock(&cur->bio_list_lock);
715                 ret = 1;
716                 goto out;
717         }
718 lockit:
719         refcount_inc(&rbio->refs);
720         list_add(&rbio->hash_list, &h->hash_list);
721 out:
722         spin_unlock(&h->lock);
723         if (cache_drop)
724                 remove_rbio_from_cache(cache_drop);
725         if (freeit)
726                 free_raid_bio(freeit);
727         return ret;
728 }
729
730 static void recover_rbio_work_locked(struct work_struct *work);
731
732 /*
733  * called as rmw or parity rebuild is completed.  If the plug list has more
734  * rbios waiting for this stripe, the next one on the list will be started
735  */
736 static noinline void unlock_stripe(struct btrfs_raid_bio *rbio)
737 {
738         int bucket;
739         struct btrfs_stripe_hash *h;
740         int keep_cache = 0;
741
742         bucket = rbio_bucket(rbio);
743         h = rbio->bioc->fs_info->stripe_hash_table->table + bucket;
744
745         if (list_empty(&rbio->plug_list))
746                 cache_rbio(rbio);
747
748         spin_lock(&h->lock);
749         spin_lock(&rbio->bio_list_lock);
750
751         if (!list_empty(&rbio->hash_list)) {
752                 /*
753                  * if we're still cached and there is no other IO
754                  * to perform, just leave this rbio here for others
755                  * to steal from later
756                  */
757                 if (list_empty(&rbio->plug_list) &&
758                     test_bit(RBIO_CACHE_BIT, &rbio->flags)) {
759                         keep_cache = 1;
760                         clear_bit(RBIO_RMW_LOCKED_BIT, &rbio->flags);
761                         BUG_ON(!bio_list_empty(&rbio->bio_list));
762                         goto done;
763                 }
764
765                 list_del_init(&rbio->hash_list);
766                 refcount_dec(&rbio->refs);
767
768                 /*
769                  * we use the plug list to hold all the rbios
770                  * waiting for the chance to lock this stripe.
771                  * hand the lock over to one of them.
772                  */
773                 if (!list_empty(&rbio->plug_list)) {
774                         struct btrfs_raid_bio *next;
775                         struct list_head *head = rbio->plug_list.next;
776
777                         next = list_entry(head, struct btrfs_raid_bio,
778                                           plug_list);
779
780                         list_del_init(&rbio->plug_list);
781
782                         list_add(&next->hash_list, &h->hash_list);
783                         refcount_inc(&next->refs);
784                         spin_unlock(&rbio->bio_list_lock);
785                         spin_unlock(&h->lock);
786
787                         if (next->operation == BTRFS_RBIO_READ_REBUILD)
788                                 start_async_work(next, recover_rbio_work_locked);
789                         else if (next->operation == BTRFS_RBIO_REBUILD_MISSING) {
790                                 steal_rbio(rbio, next);
791                                 start_async_work(next, recover_rbio_work_locked);
792                         } else if (next->operation == BTRFS_RBIO_WRITE) {
793                                 steal_rbio(rbio, next);
794                                 start_async_work(next, rmw_rbio_work_locked);
795                         } else if (next->operation == BTRFS_RBIO_PARITY_SCRUB) {
796                                 steal_rbio(rbio, next);
797                                 start_async_work(next, scrub_rbio_work_locked);
798                         }
799
800                         goto done_nolock;
801                 }
802         }
803 done:
804         spin_unlock(&rbio->bio_list_lock);
805         spin_unlock(&h->lock);
806
807 done_nolock:
808         if (!keep_cache)
809                 remove_rbio_from_cache(rbio);
810 }
811
812 static void rbio_endio_bio_list(struct bio *cur, blk_status_t err)
813 {
814         struct bio *next;
815
816         while (cur) {
817                 next = cur->bi_next;
818                 cur->bi_next = NULL;
819                 cur->bi_status = err;
820                 bio_endio(cur);
821                 cur = next;
822         }
823 }
824
825 /*
826  * this frees the rbio and runs through all the bios in the
827  * bio_list and calls end_io on them
828  */
829 static void rbio_orig_end_io(struct btrfs_raid_bio *rbio, blk_status_t err)
830 {
831         struct bio *cur = bio_list_get(&rbio->bio_list);
832         struct bio *extra;
833
834         kfree(rbio->csum_buf);
835         bitmap_free(rbio->csum_bitmap);
836         rbio->csum_buf = NULL;
837         rbio->csum_bitmap = NULL;
838
839         /*
840          * Clear the data bitmap, as the rbio may be cached for later usage.
841          * do this before before unlock_stripe() so there will be no new bio
842          * for this bio.
843          */
844         bitmap_clear(&rbio->dbitmap, 0, rbio->stripe_nsectors);
845
846         /*
847          * At this moment, rbio->bio_list is empty, however since rbio does not
848          * always have RBIO_RMW_LOCKED_BIT set and rbio is still linked on the
849          * hash list, rbio may be merged with others so that rbio->bio_list
850          * becomes non-empty.
851          * Once unlock_stripe() is done, rbio->bio_list will not be updated any
852          * more and we can call bio_endio() on all queued bios.
853          */
854         unlock_stripe(rbio);
855         extra = bio_list_get(&rbio->bio_list);
856         free_raid_bio(rbio);
857
858         rbio_endio_bio_list(cur, err);
859         if (extra)
860                 rbio_endio_bio_list(extra, err);
861 }
862
863 /*
864  * Get a sector pointer specified by its @stripe_nr and @sector_nr.
865  *
866  * @rbio:               The raid bio
867  * @stripe_nr:          Stripe number, valid range [0, real_stripe)
868  * @sector_nr:          Sector number inside the stripe,
869  *                      valid range [0, stripe_nsectors)
870  * @bio_list_only:      Whether to use sectors inside the bio list only.
871  *
872  * The read/modify/write code wants to reuse the original bio page as much
873  * as possible, and only use stripe_sectors as fallback.
874  */
875 static struct sector_ptr *sector_in_rbio(struct btrfs_raid_bio *rbio,
876                                          int stripe_nr, int sector_nr,
877                                          bool bio_list_only)
878 {
879         struct sector_ptr *sector;
880         int index;
881
882         ASSERT(stripe_nr >= 0 && stripe_nr < rbio->real_stripes);
883         ASSERT(sector_nr >= 0 && sector_nr < rbio->stripe_nsectors);
884
885         index = stripe_nr * rbio->stripe_nsectors + sector_nr;
886         ASSERT(index >= 0 && index < rbio->nr_sectors);
887
888         spin_lock(&rbio->bio_list_lock);
889         sector = &rbio->bio_sectors[index];
890         if (sector->page || bio_list_only) {
891                 /* Don't return sector without a valid page pointer */
892                 if (!sector->page)
893                         sector = NULL;
894                 spin_unlock(&rbio->bio_list_lock);
895                 return sector;
896         }
897         spin_unlock(&rbio->bio_list_lock);
898
899         return &rbio->stripe_sectors[index];
900 }
901
902 /*
903  * allocation and initial setup for the btrfs_raid_bio.  Not
904  * this does not allocate any pages for rbio->pages.
905  */
906 static struct btrfs_raid_bio *alloc_rbio(struct btrfs_fs_info *fs_info,
907                                          struct btrfs_io_context *bioc)
908 {
909         const unsigned int real_stripes = bioc->num_stripes - bioc->num_tgtdevs;
910         const unsigned int stripe_npages = BTRFS_STRIPE_LEN >> PAGE_SHIFT;
911         const unsigned int num_pages = stripe_npages * real_stripes;
912         const unsigned int stripe_nsectors =
913                 BTRFS_STRIPE_LEN >> fs_info->sectorsize_bits;
914         const unsigned int num_sectors = stripe_nsectors * real_stripes;
915         struct btrfs_raid_bio *rbio;
916
917         /* PAGE_SIZE must also be aligned to sectorsize for subpage support */
918         ASSERT(IS_ALIGNED(PAGE_SIZE, fs_info->sectorsize));
919         /*
920          * Our current stripe len should be fixed to 64k thus stripe_nsectors
921          * (at most 16) should be no larger than BITS_PER_LONG.
922          */
923         ASSERT(stripe_nsectors <= BITS_PER_LONG);
924
925         rbio = kzalloc(sizeof(*rbio), GFP_NOFS);
926         if (!rbio)
927                 return ERR_PTR(-ENOMEM);
928         rbio->stripe_pages = kcalloc(num_pages, sizeof(struct page *),
929                                      GFP_NOFS);
930         rbio->bio_sectors = kcalloc(num_sectors, sizeof(struct sector_ptr),
931                                     GFP_NOFS);
932         rbio->stripe_sectors = kcalloc(num_sectors, sizeof(struct sector_ptr),
933                                        GFP_NOFS);
934         rbio->finish_pointers = kcalloc(real_stripes, sizeof(void *), GFP_NOFS);
935         rbio->error_bitmap = bitmap_zalloc(num_sectors, GFP_NOFS);
936
937         if (!rbio->stripe_pages || !rbio->bio_sectors || !rbio->stripe_sectors ||
938             !rbio->finish_pointers || !rbio->error_bitmap) {
939                 free_raid_bio_pointers(rbio);
940                 kfree(rbio);
941                 return ERR_PTR(-ENOMEM);
942         }
943
944         bio_list_init(&rbio->bio_list);
945         init_waitqueue_head(&rbio->io_wait);
946         INIT_LIST_HEAD(&rbio->plug_list);
947         spin_lock_init(&rbio->bio_list_lock);
948         INIT_LIST_HEAD(&rbio->stripe_cache);
949         INIT_LIST_HEAD(&rbio->hash_list);
950         btrfs_get_bioc(bioc);
951         rbio->bioc = bioc;
952         rbio->nr_pages = num_pages;
953         rbio->nr_sectors = num_sectors;
954         rbio->real_stripes = real_stripes;
955         rbio->stripe_npages = stripe_npages;
956         rbio->stripe_nsectors = stripe_nsectors;
957         refcount_set(&rbio->refs, 1);
958         atomic_set(&rbio->stripes_pending, 0);
959
960         ASSERT(btrfs_nr_parity_stripes(bioc->map_type));
961         rbio->nr_data = real_stripes - btrfs_nr_parity_stripes(bioc->map_type);
962
963         return rbio;
964 }
965
966 /* allocate pages for all the stripes in the bio, including parity */
967 static int alloc_rbio_pages(struct btrfs_raid_bio *rbio)
968 {
969         int ret;
970
971         ret = btrfs_alloc_page_array(rbio->nr_pages, rbio->stripe_pages);
972         if (ret < 0)
973                 return ret;
974         /* Mapping all sectors */
975         index_stripe_sectors(rbio);
976         return 0;
977 }
978
979 /* only allocate pages for p/q stripes */
980 static int alloc_rbio_parity_pages(struct btrfs_raid_bio *rbio)
981 {
982         const int data_pages = rbio->nr_data * rbio->stripe_npages;
983         int ret;
984
985         ret = btrfs_alloc_page_array(rbio->nr_pages - data_pages,
986                                      rbio->stripe_pages + data_pages);
987         if (ret < 0)
988                 return ret;
989
990         index_stripe_sectors(rbio);
991         return 0;
992 }
993
994 /*
995  * Return the total number of errors found in the vertical stripe of @sector_nr.
996  *
997  * @faila and @failb will also be updated to the first and second stripe
998  * number of the errors.
999  */
1000 static int get_rbio_veritical_errors(struct btrfs_raid_bio *rbio, int sector_nr,
1001                                      int *faila, int *failb)
1002 {
1003         int stripe_nr;
1004         int found_errors = 0;
1005
1006         if (faila || failb) {
1007                 /*
1008                  * Both @faila and @failb should be valid pointers if any of
1009                  * them is specified.
1010                  */
1011                 ASSERT(faila && failb);
1012                 *faila = -1;
1013                 *failb = -1;
1014         }
1015
1016         for (stripe_nr = 0; stripe_nr < rbio->real_stripes; stripe_nr++) {
1017                 int total_sector_nr = stripe_nr * rbio->stripe_nsectors + sector_nr;
1018
1019                 if (test_bit(total_sector_nr, rbio->error_bitmap)) {
1020                         found_errors++;
1021                         if (faila) {
1022                                 /* Update faila and failb. */
1023                                 if (*faila < 0)
1024                                         *faila = stripe_nr;
1025                                 else if (*failb < 0)
1026                                         *failb = stripe_nr;
1027                         }
1028                 }
1029         }
1030         return found_errors;
1031 }
1032
1033 /*
1034  * Add a single sector @sector into our list of bios for IO.
1035  *
1036  * Return 0 if everything went well.
1037  * Return <0 for error.
1038  */
1039 static int rbio_add_io_sector(struct btrfs_raid_bio *rbio,
1040                               struct bio_list *bio_list,
1041                               struct sector_ptr *sector,
1042                               unsigned int stripe_nr,
1043                               unsigned int sector_nr,
1044                               enum req_op op)
1045 {
1046         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
1047         struct bio *last = bio_list->tail;
1048         int ret;
1049         struct bio *bio;
1050         struct btrfs_io_stripe *stripe;
1051         u64 disk_start;
1052
1053         /*
1054          * Note: here stripe_nr has taken device replace into consideration,
1055          * thus it can be larger than rbio->real_stripe.
1056          * So here we check against bioc->num_stripes, not rbio->real_stripes.
1057          */
1058         ASSERT(stripe_nr >= 0 && stripe_nr < rbio->bioc->num_stripes);
1059         ASSERT(sector_nr >= 0 && sector_nr < rbio->stripe_nsectors);
1060         ASSERT(sector->page);
1061
1062         stripe = &rbio->bioc->stripes[stripe_nr];
1063         disk_start = stripe->physical + sector_nr * sectorsize;
1064
1065         /* if the device is missing, just fail this stripe */
1066         if (!stripe->dev->bdev) {
1067                 int found_errors;
1068
1069                 set_bit(stripe_nr * rbio->stripe_nsectors + sector_nr,
1070                         rbio->error_bitmap);
1071
1072                 /* Check if we have reached tolerance early. */
1073                 found_errors = get_rbio_veritical_errors(rbio, sector_nr,
1074                                                          NULL, NULL);
1075                 if (found_errors > rbio->bioc->max_errors)
1076                         return -EIO;
1077                 return 0;
1078         }
1079
1080         /* see if we can add this page onto our existing bio */
1081         if (last) {
1082                 u64 last_end = last->bi_iter.bi_sector << 9;
1083                 last_end += last->bi_iter.bi_size;
1084
1085                 /*
1086                  * we can't merge these if they are from different
1087                  * devices or if they are not contiguous
1088                  */
1089                 if (last_end == disk_start && !last->bi_status &&
1090                     last->bi_bdev == stripe->dev->bdev) {
1091                         ret = bio_add_page(last, sector->page, sectorsize,
1092                                            sector->pgoff);
1093                         if (ret == sectorsize)
1094                                 return 0;
1095                 }
1096         }
1097
1098         /* put a new bio on the list */
1099         bio = bio_alloc(stripe->dev->bdev,
1100                         max(BTRFS_STRIPE_LEN >> PAGE_SHIFT, 1),
1101                         op, GFP_NOFS);
1102         bio->bi_iter.bi_sector = disk_start >> 9;
1103         bio->bi_private = rbio;
1104
1105         bio_add_page(bio, sector->page, sectorsize, sector->pgoff);
1106         bio_list_add(bio_list, bio);
1107         return 0;
1108 }
1109
1110 static void index_one_bio(struct btrfs_raid_bio *rbio, struct bio *bio)
1111 {
1112         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
1113         struct bio_vec bvec;
1114         struct bvec_iter iter;
1115         u32 offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) -
1116                      rbio->bioc->raid_map[0];
1117
1118         bio_for_each_segment(bvec, bio, iter) {
1119                 u32 bvec_offset;
1120
1121                 for (bvec_offset = 0; bvec_offset < bvec.bv_len;
1122                      bvec_offset += sectorsize, offset += sectorsize) {
1123                         int index = offset / sectorsize;
1124                         struct sector_ptr *sector = &rbio->bio_sectors[index];
1125
1126                         sector->page = bvec.bv_page;
1127                         sector->pgoff = bvec.bv_offset + bvec_offset;
1128                         ASSERT(sector->pgoff < PAGE_SIZE);
1129                 }
1130         }
1131 }
1132
1133 /*
1134  * helper function to walk our bio list and populate the bio_pages array with
1135  * the result.  This seems expensive, but it is faster than constantly
1136  * searching through the bio list as we setup the IO in finish_rmw or stripe
1137  * reconstruction.
1138  *
1139  * This must be called before you trust the answers from page_in_rbio
1140  */
1141 static void index_rbio_pages(struct btrfs_raid_bio *rbio)
1142 {
1143         struct bio *bio;
1144
1145         spin_lock(&rbio->bio_list_lock);
1146         bio_list_for_each(bio, &rbio->bio_list)
1147                 index_one_bio(rbio, bio);
1148
1149         spin_unlock(&rbio->bio_list_lock);
1150 }
1151
1152 static void bio_get_trace_info(struct btrfs_raid_bio *rbio, struct bio *bio,
1153                                struct raid56_bio_trace_info *trace_info)
1154 {
1155         const struct btrfs_io_context *bioc = rbio->bioc;
1156         int i;
1157
1158         ASSERT(bioc);
1159
1160         /* We rely on bio->bi_bdev to find the stripe number. */
1161         if (!bio->bi_bdev)
1162                 goto not_found;
1163
1164         for (i = 0; i < bioc->num_stripes; i++) {
1165                 if (bio->bi_bdev != bioc->stripes[i].dev->bdev)
1166                         continue;
1167                 trace_info->stripe_nr = i;
1168                 trace_info->devid = bioc->stripes[i].dev->devid;
1169                 trace_info->offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) -
1170                                      bioc->stripes[i].physical;
1171                 return;
1172         }
1173
1174 not_found:
1175         trace_info->devid = -1;
1176         trace_info->offset = -1;
1177         trace_info->stripe_nr = -1;
1178 }
1179
1180 static inline void bio_list_put(struct bio_list *bio_list)
1181 {
1182         struct bio *bio;
1183
1184         while ((bio = bio_list_pop(bio_list)))
1185                 bio_put(bio);
1186 }
1187
1188 /* Generate PQ for one vertical stripe. */
1189 static void generate_pq_vertical(struct btrfs_raid_bio *rbio, int sectornr)
1190 {
1191         void **pointers = rbio->finish_pointers;
1192         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
1193         struct sector_ptr *sector;
1194         int stripe;
1195         const bool has_qstripe = rbio->bioc->map_type & BTRFS_BLOCK_GROUP_RAID6;
1196
1197         /* First collect one sector from each data stripe */
1198         for (stripe = 0; stripe < rbio->nr_data; stripe++) {
1199                 sector = sector_in_rbio(rbio, stripe, sectornr, 0);
1200                 pointers[stripe] = kmap_local_page(sector->page) +
1201                                    sector->pgoff;
1202         }
1203
1204         /* Then add the parity stripe */
1205         sector = rbio_pstripe_sector(rbio, sectornr);
1206         sector->uptodate = 1;
1207         pointers[stripe++] = kmap_local_page(sector->page) + sector->pgoff;
1208
1209         if (has_qstripe) {
1210                 /*
1211                  * RAID6, add the qstripe and call the library function
1212                  * to fill in our p/q
1213                  */
1214                 sector = rbio_qstripe_sector(rbio, sectornr);
1215                 sector->uptodate = 1;
1216                 pointers[stripe++] = kmap_local_page(sector->page) +
1217                                      sector->pgoff;
1218
1219                 raid6_call.gen_syndrome(rbio->real_stripes, sectorsize,
1220                                         pointers);
1221         } else {
1222                 /* raid5 */
1223                 memcpy(pointers[rbio->nr_data], pointers[0], sectorsize);
1224                 run_xor(pointers + 1, rbio->nr_data - 1, sectorsize);
1225         }
1226         for (stripe = stripe - 1; stripe >= 0; stripe--)
1227                 kunmap_local(pointers[stripe]);
1228 }
1229
1230 static int rmw_assemble_write_bios(struct btrfs_raid_bio *rbio,
1231                                    struct bio_list *bio_list)
1232 {
1233         /* The total sector number inside the full stripe. */
1234         int total_sector_nr;
1235         int sectornr;
1236         int stripe;
1237         int ret;
1238
1239         ASSERT(bio_list_size(bio_list) == 0);
1240
1241         /* We should have at least one data sector. */
1242         ASSERT(bitmap_weight(&rbio->dbitmap, rbio->stripe_nsectors));
1243
1244         /*
1245          * Reset errors, as we may have errors inherited from from degraded
1246          * write.
1247          */
1248         bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors);
1249
1250         /*
1251          * Start assembly.  Make bios for everything from the higher layers (the
1252          * bio_list in our rbio) and our P/Q.  Ignore everything else.
1253          */
1254         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
1255              total_sector_nr++) {
1256                 struct sector_ptr *sector;
1257
1258                 stripe = total_sector_nr / rbio->stripe_nsectors;
1259                 sectornr = total_sector_nr % rbio->stripe_nsectors;
1260
1261                 /* This vertical stripe has no data, skip it. */
1262                 if (!test_bit(sectornr, &rbio->dbitmap))
1263                         continue;
1264
1265                 if (stripe < rbio->nr_data) {
1266                         sector = sector_in_rbio(rbio, stripe, sectornr, 1);
1267                         if (!sector)
1268                                 continue;
1269                 } else {
1270                         sector = rbio_stripe_sector(rbio, stripe, sectornr);
1271                 }
1272
1273                 ret = rbio_add_io_sector(rbio, bio_list, sector, stripe,
1274                                          sectornr, REQ_OP_WRITE);
1275                 if (ret)
1276                         goto error;
1277         }
1278
1279         if (likely(!rbio->bioc->num_tgtdevs))
1280                 return 0;
1281
1282         /* Make a copy for the replace target device. */
1283         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
1284              total_sector_nr++) {
1285                 struct sector_ptr *sector;
1286
1287                 stripe = total_sector_nr / rbio->stripe_nsectors;
1288                 sectornr = total_sector_nr % rbio->stripe_nsectors;
1289
1290                 if (!rbio->bioc->tgtdev_map[stripe]) {
1291                         /*
1292                          * We can skip the whole stripe completely, note
1293                          * total_sector_nr will be increased by one anyway.
1294                          */
1295                         ASSERT(sectornr == 0);
1296                         total_sector_nr += rbio->stripe_nsectors - 1;
1297                         continue;
1298                 }
1299
1300                 /* This vertical stripe has no data, skip it. */
1301                 if (!test_bit(sectornr, &rbio->dbitmap))
1302                         continue;
1303
1304                 if (stripe < rbio->nr_data) {
1305                         sector = sector_in_rbio(rbio, stripe, sectornr, 1);
1306                         if (!sector)
1307                                 continue;
1308                 } else {
1309                         sector = rbio_stripe_sector(rbio, stripe, sectornr);
1310                 }
1311
1312                 ret = rbio_add_io_sector(rbio, bio_list, sector,
1313                                          rbio->bioc->tgtdev_map[stripe],
1314                                          sectornr, REQ_OP_WRITE);
1315                 if (ret)
1316                         goto error;
1317         }
1318
1319         return 0;
1320 error:
1321         bio_list_put(bio_list);
1322         return -EIO;
1323 }
1324
1325 static void set_rbio_range_error(struct btrfs_raid_bio *rbio, struct bio *bio)
1326 {
1327         struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
1328         u32 offset = (bio->bi_iter.bi_sector << SECTOR_SHIFT) -
1329                      rbio->bioc->raid_map[0];
1330         int total_nr_sector = offset >> fs_info->sectorsize_bits;
1331
1332         ASSERT(total_nr_sector < rbio->nr_data * rbio->stripe_nsectors);
1333
1334         bitmap_set(rbio->error_bitmap, total_nr_sector,
1335                    bio->bi_iter.bi_size >> fs_info->sectorsize_bits);
1336
1337         /*
1338          * Special handling for raid56_alloc_missing_rbio() used by
1339          * scrub/replace.  Unlike call path in raid56_parity_recover(), they
1340          * pass an empty bio here.  Thus we have to find out the missing device
1341          * and mark the stripe error instead.
1342          */
1343         if (bio->bi_iter.bi_size == 0) {
1344                 bool found_missing = false;
1345                 int stripe_nr;
1346
1347                 for (stripe_nr = 0; stripe_nr < rbio->real_stripes; stripe_nr++) {
1348                         if (!rbio->bioc->stripes[stripe_nr].dev->bdev) {
1349                                 found_missing = true;
1350                                 bitmap_set(rbio->error_bitmap,
1351                                            stripe_nr * rbio->stripe_nsectors,
1352                                            rbio->stripe_nsectors);
1353                         }
1354                 }
1355                 ASSERT(found_missing);
1356         }
1357 }
1358
1359 /*
1360  * For subpage case, we can no longer set page Up-to-date directly for
1361  * stripe_pages[], thus we need to locate the sector.
1362  */
1363 static struct sector_ptr *find_stripe_sector(struct btrfs_raid_bio *rbio,
1364                                              struct page *page,
1365                                              unsigned int pgoff)
1366 {
1367         int i;
1368
1369         for (i = 0; i < rbio->nr_sectors; i++) {
1370                 struct sector_ptr *sector = &rbio->stripe_sectors[i];
1371
1372                 if (sector->page == page && sector->pgoff == pgoff)
1373                         return sector;
1374         }
1375         return NULL;
1376 }
1377
1378 /*
1379  * this sets each page in the bio uptodate.  It should only be used on private
1380  * rbio pages, nothing that comes in from the higher layers
1381  */
1382 static void set_bio_pages_uptodate(struct btrfs_raid_bio *rbio, struct bio *bio)
1383 {
1384         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
1385         struct bio_vec *bvec;
1386         struct bvec_iter_all iter_all;
1387
1388         ASSERT(!bio_flagged(bio, BIO_CLONED));
1389
1390         bio_for_each_segment_all(bvec, bio, iter_all) {
1391                 struct sector_ptr *sector;
1392                 int pgoff;
1393
1394                 for (pgoff = bvec->bv_offset; pgoff - bvec->bv_offset < bvec->bv_len;
1395                      pgoff += sectorsize) {
1396                         sector = find_stripe_sector(rbio, bvec->bv_page, pgoff);
1397                         ASSERT(sector);
1398                         if (sector)
1399                                 sector->uptodate = 1;
1400                 }
1401         }
1402 }
1403
1404 static int get_bio_sector_nr(struct btrfs_raid_bio *rbio, struct bio *bio)
1405 {
1406         struct bio_vec *bv = bio_first_bvec_all(bio);
1407         int i;
1408
1409         for (i = 0; i < rbio->nr_sectors; i++) {
1410                 struct sector_ptr *sector;
1411
1412                 sector = &rbio->stripe_sectors[i];
1413                 if (sector->page == bv->bv_page && sector->pgoff == bv->bv_offset)
1414                         break;
1415                 sector = &rbio->bio_sectors[i];
1416                 if (sector->page == bv->bv_page && sector->pgoff == bv->bv_offset)
1417                         break;
1418         }
1419         ASSERT(i < rbio->nr_sectors);
1420         return i;
1421 }
1422
1423 static void rbio_update_error_bitmap(struct btrfs_raid_bio *rbio, struct bio *bio)
1424 {
1425         int total_sector_nr = get_bio_sector_nr(rbio, bio);
1426         u32 bio_size = 0;
1427         struct bio_vec *bvec;
1428         int i;
1429
1430         bio_for_each_bvec_all(bvec, bio, i)
1431                 bio_size += bvec->bv_len;
1432
1433         /*
1434          * Since we can have multiple bios touching the error_bitmap, we cannot
1435          * call bitmap_set() without protection.
1436          *
1437          * Instead use set_bit() for each bit, as set_bit() itself is atomic.
1438          */
1439         for (i = total_sector_nr; i < total_sector_nr +
1440              (bio_size >> rbio->bioc->fs_info->sectorsize_bits); i++)
1441                 set_bit(i, rbio->error_bitmap);
1442 }
1443
1444 /* Verify the data sectors at read time. */
1445 static void verify_bio_data_sectors(struct btrfs_raid_bio *rbio,
1446                                     struct bio *bio)
1447 {
1448         struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
1449         int total_sector_nr = get_bio_sector_nr(rbio, bio);
1450         struct bio_vec *bvec;
1451         struct bvec_iter_all iter_all;
1452
1453         /* No data csum for the whole stripe, no need to verify. */
1454         if (!rbio->csum_bitmap || !rbio->csum_buf)
1455                 return;
1456
1457         /* P/Q stripes, they have no data csum to verify against. */
1458         if (total_sector_nr >= rbio->nr_data * rbio->stripe_nsectors)
1459                 return;
1460
1461         bio_for_each_segment_all(bvec, bio, iter_all) {
1462                 int bv_offset;
1463
1464                 for (bv_offset = bvec->bv_offset;
1465                      bv_offset < bvec->bv_offset + bvec->bv_len;
1466                      bv_offset += fs_info->sectorsize, total_sector_nr++) {
1467                         u8 csum_buf[BTRFS_CSUM_SIZE];
1468                         u8 *expected_csum = rbio->csum_buf +
1469                                             total_sector_nr * fs_info->csum_size;
1470                         int ret;
1471
1472                         /* No csum for this sector, skip to the next sector. */
1473                         if (!test_bit(total_sector_nr, rbio->csum_bitmap))
1474                                 continue;
1475
1476                         ret = btrfs_check_sector_csum(fs_info, bvec->bv_page,
1477                                 bv_offset, csum_buf, expected_csum);
1478                         if (ret < 0)
1479                                 set_bit(total_sector_nr, rbio->error_bitmap);
1480                 }
1481         }
1482 }
1483
1484 static void raid_wait_read_end_io(struct bio *bio)
1485 {
1486         struct btrfs_raid_bio *rbio = bio->bi_private;
1487
1488         if (bio->bi_status) {
1489                 rbio_update_error_bitmap(rbio, bio);
1490         } else {
1491                 set_bio_pages_uptodate(rbio, bio);
1492                 verify_bio_data_sectors(rbio, bio);
1493         }
1494
1495         bio_put(bio);
1496         if (atomic_dec_and_test(&rbio->stripes_pending))
1497                 wake_up(&rbio->io_wait);
1498 }
1499
1500 static void submit_read_wait_bio_list(struct btrfs_raid_bio *rbio,
1501                              struct bio_list *bio_list)
1502 {
1503         struct bio *bio;
1504
1505         atomic_set(&rbio->stripes_pending, bio_list_size(bio_list));
1506         while ((bio = bio_list_pop(bio_list))) {
1507                 bio->bi_end_io = raid_wait_read_end_io;
1508
1509                 if (trace_raid56_scrub_read_recover_enabled()) {
1510                         struct raid56_bio_trace_info trace_info = { 0 };
1511
1512                         bio_get_trace_info(rbio, bio, &trace_info);
1513                         trace_raid56_scrub_read_recover(rbio, bio, &trace_info);
1514                 }
1515                 submit_bio(bio);
1516         }
1517
1518         wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
1519 }
1520
1521 static int alloc_rbio_data_pages(struct btrfs_raid_bio *rbio)
1522 {
1523         const int data_pages = rbio->nr_data * rbio->stripe_npages;
1524         int ret;
1525
1526         ret = btrfs_alloc_page_array(data_pages, rbio->stripe_pages);
1527         if (ret < 0)
1528                 return ret;
1529
1530         index_stripe_sectors(rbio);
1531         return 0;
1532 }
1533
1534 /*
1535  * We use plugging call backs to collect full stripes.
1536  * Any time we get a partial stripe write while plugged
1537  * we collect it into a list.  When the unplug comes down,
1538  * we sort the list by logical block number and merge
1539  * everything we can into the same rbios
1540  */
1541 struct btrfs_plug_cb {
1542         struct blk_plug_cb cb;
1543         struct btrfs_fs_info *info;
1544         struct list_head rbio_list;
1545         struct work_struct work;
1546 };
1547
1548 /*
1549  * rbios on the plug list are sorted for easier merging.
1550  */
1551 static int plug_cmp(void *priv, const struct list_head *a,
1552                     const struct list_head *b)
1553 {
1554         const struct btrfs_raid_bio *ra = container_of(a, struct btrfs_raid_bio,
1555                                                        plug_list);
1556         const struct btrfs_raid_bio *rb = container_of(b, struct btrfs_raid_bio,
1557                                                        plug_list);
1558         u64 a_sector = ra->bio_list.head->bi_iter.bi_sector;
1559         u64 b_sector = rb->bio_list.head->bi_iter.bi_sector;
1560
1561         if (a_sector < b_sector)
1562                 return -1;
1563         if (a_sector > b_sector)
1564                 return 1;
1565         return 0;
1566 }
1567
1568 static void raid_unplug(struct blk_plug_cb *cb, bool from_schedule)
1569 {
1570         struct btrfs_plug_cb *plug = container_of(cb, struct btrfs_plug_cb, cb);
1571         struct btrfs_raid_bio *cur;
1572         struct btrfs_raid_bio *last = NULL;
1573
1574         list_sort(NULL, &plug->rbio_list, plug_cmp);
1575
1576         while (!list_empty(&plug->rbio_list)) {
1577                 cur = list_entry(plug->rbio_list.next,
1578                                  struct btrfs_raid_bio, plug_list);
1579                 list_del_init(&cur->plug_list);
1580
1581                 if (rbio_is_full(cur)) {
1582                         /* We have a full stripe, queue it down. */
1583                         start_async_work(cur, rmw_rbio_work);
1584                         continue;
1585                 }
1586                 if (last) {
1587                         if (rbio_can_merge(last, cur)) {
1588                                 merge_rbio(last, cur);
1589                                 free_raid_bio(cur);
1590                                 continue;
1591                         }
1592                         start_async_work(last, rmw_rbio_work);
1593                 }
1594                 last = cur;
1595         }
1596         if (last)
1597                 start_async_work(last, rmw_rbio_work);
1598         kfree(plug);
1599 }
1600
1601 /* Add the original bio into rbio->bio_list, and update rbio::dbitmap. */
1602 static void rbio_add_bio(struct btrfs_raid_bio *rbio, struct bio *orig_bio)
1603 {
1604         const struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
1605         const u64 orig_logical = orig_bio->bi_iter.bi_sector << SECTOR_SHIFT;
1606         const u64 full_stripe_start = rbio->bioc->raid_map[0];
1607         const u32 orig_len = orig_bio->bi_iter.bi_size;
1608         const u32 sectorsize = fs_info->sectorsize;
1609         u64 cur_logical;
1610
1611         ASSERT(orig_logical >= full_stripe_start &&
1612                orig_logical + orig_len <= full_stripe_start +
1613                rbio->nr_data * BTRFS_STRIPE_LEN);
1614
1615         bio_list_add(&rbio->bio_list, orig_bio);
1616         rbio->bio_list_bytes += orig_bio->bi_iter.bi_size;
1617
1618         /* Update the dbitmap. */
1619         for (cur_logical = orig_logical; cur_logical < orig_logical + orig_len;
1620              cur_logical += sectorsize) {
1621                 int bit = ((u32)(cur_logical - full_stripe_start) >>
1622                            fs_info->sectorsize_bits) % rbio->stripe_nsectors;
1623
1624                 set_bit(bit, &rbio->dbitmap);
1625         }
1626 }
1627
1628 /*
1629  * our main entry point for writes from the rest of the FS.
1630  */
1631 void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc)
1632 {
1633         struct btrfs_fs_info *fs_info = bioc->fs_info;
1634         struct btrfs_raid_bio *rbio;
1635         struct btrfs_plug_cb *plug = NULL;
1636         struct blk_plug_cb *cb;
1637
1638         rbio = alloc_rbio(fs_info, bioc);
1639         if (IS_ERR(rbio)) {
1640                 bio->bi_status = errno_to_blk_status(PTR_ERR(rbio));
1641                 bio_endio(bio);
1642                 return;
1643         }
1644         rbio->operation = BTRFS_RBIO_WRITE;
1645         rbio_add_bio(rbio, bio);
1646
1647         /*
1648          * Don't plug on full rbios, just get them out the door
1649          * as quickly as we can
1650          */
1651         if (!rbio_is_full(rbio)) {
1652                 cb = blk_check_plugged(raid_unplug, fs_info, sizeof(*plug));
1653                 if (cb) {
1654                         plug = container_of(cb, struct btrfs_plug_cb, cb);
1655                         if (!plug->info) {
1656                                 plug->info = fs_info;
1657                                 INIT_LIST_HEAD(&plug->rbio_list);
1658                         }
1659                         list_add_tail(&rbio->plug_list, &plug->rbio_list);
1660                         return;
1661                 }
1662         }
1663
1664         /*
1665          * Either we don't have any existing plug, or we're doing a full stripe,
1666          * queue the rmw work now.
1667          */
1668         start_async_work(rbio, rmw_rbio_work);
1669 }
1670
1671 static int verify_one_sector(struct btrfs_raid_bio *rbio,
1672                              int stripe_nr, int sector_nr)
1673 {
1674         struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
1675         struct sector_ptr *sector;
1676         u8 csum_buf[BTRFS_CSUM_SIZE];
1677         u8 *csum_expected;
1678         int ret;
1679
1680         if (!rbio->csum_bitmap || !rbio->csum_buf)
1681                 return 0;
1682
1683         /* No way to verify P/Q as they are not covered by data csum. */
1684         if (stripe_nr >= rbio->nr_data)
1685                 return 0;
1686         /*
1687          * If we're rebuilding a read, we have to use pages from the
1688          * bio list if possible.
1689          */
1690         if ((rbio->operation == BTRFS_RBIO_READ_REBUILD ||
1691              rbio->operation == BTRFS_RBIO_REBUILD_MISSING)) {
1692                 sector = sector_in_rbio(rbio, stripe_nr, sector_nr, 0);
1693         } else {
1694                 sector = rbio_stripe_sector(rbio, stripe_nr, sector_nr);
1695         }
1696
1697         ASSERT(sector->page);
1698
1699         csum_expected = rbio->csum_buf +
1700                         (stripe_nr * rbio->stripe_nsectors + sector_nr) *
1701                         fs_info->csum_size;
1702         ret = btrfs_check_sector_csum(fs_info, sector->page, sector->pgoff,
1703                                       csum_buf, csum_expected);
1704         return ret;
1705 }
1706
1707 /*
1708  * Recover a vertical stripe specified by @sector_nr.
1709  * @*pointers are the pre-allocated pointers by the caller, so we don't
1710  * need to allocate/free the pointers again and again.
1711  */
1712 static int recover_vertical(struct btrfs_raid_bio *rbio, int sector_nr,
1713                             void **pointers, void **unmap_array)
1714 {
1715         struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
1716         struct sector_ptr *sector;
1717         const u32 sectorsize = fs_info->sectorsize;
1718         int found_errors;
1719         int faila;
1720         int failb;
1721         int stripe_nr;
1722         int ret = 0;
1723
1724         /*
1725          * Now we just use bitmap to mark the horizontal stripes in
1726          * which we have data when doing parity scrub.
1727          */
1728         if (rbio->operation == BTRFS_RBIO_PARITY_SCRUB &&
1729             !test_bit(sector_nr, &rbio->dbitmap))
1730                 return 0;
1731
1732         found_errors = get_rbio_veritical_errors(rbio, sector_nr, &faila,
1733                                                  &failb);
1734         /*
1735          * No errors in the vertical stripe, skip it.  Can happen for recovery
1736          * which only part of a stripe failed csum check.
1737          */
1738         if (!found_errors)
1739                 return 0;
1740
1741         if (found_errors > rbio->bioc->max_errors)
1742                 return -EIO;
1743
1744         /*
1745          * Setup our array of pointers with sectors from each stripe
1746          *
1747          * NOTE: store a duplicate array of pointers to preserve the
1748          * pointer order.
1749          */
1750         for (stripe_nr = 0; stripe_nr < rbio->real_stripes; stripe_nr++) {
1751                 /*
1752                  * If we're rebuilding a read, we have to use pages from the
1753                  * bio list if possible.
1754                  */
1755                 if ((rbio->operation == BTRFS_RBIO_READ_REBUILD ||
1756                      rbio->operation == BTRFS_RBIO_REBUILD_MISSING)) {
1757                         sector = sector_in_rbio(rbio, stripe_nr, sector_nr, 0);
1758                 } else {
1759                         sector = rbio_stripe_sector(rbio, stripe_nr, sector_nr);
1760                 }
1761                 ASSERT(sector->page);
1762                 pointers[stripe_nr] = kmap_local_page(sector->page) +
1763                                    sector->pgoff;
1764                 unmap_array[stripe_nr] = pointers[stripe_nr];
1765         }
1766
1767         /* All raid6 handling here */
1768         if (rbio->bioc->map_type & BTRFS_BLOCK_GROUP_RAID6) {
1769                 /* Single failure, rebuild from parity raid5 style */
1770                 if (failb < 0) {
1771                         if (faila == rbio->nr_data)
1772                                 /*
1773                                  * Just the P stripe has failed, without
1774                                  * a bad data or Q stripe.
1775                                  * We have nothing to do, just skip the
1776                                  * recovery for this stripe.
1777                                  */
1778                                 goto cleanup;
1779                         /*
1780                          * a single failure in raid6 is rebuilt
1781                          * in the pstripe code below
1782                          */
1783                         goto pstripe;
1784                 }
1785
1786                 /*
1787                  * If the q stripe is failed, do a pstripe reconstruction from
1788                  * the xors.
1789                  * If both the q stripe and the P stripe are failed, we're
1790                  * here due to a crc mismatch and we can't give them the
1791                  * data they want.
1792                  */
1793                 if (rbio->bioc->raid_map[failb] == RAID6_Q_STRIPE) {
1794                         if (rbio->bioc->raid_map[faila] ==
1795                             RAID5_P_STRIPE)
1796                                 /*
1797                                  * Only P and Q are corrupted.
1798                                  * We only care about data stripes recovery,
1799                                  * can skip this vertical stripe.
1800                                  */
1801                                 goto cleanup;
1802                         /*
1803                          * Otherwise we have one bad data stripe and
1804                          * a good P stripe.  raid5!
1805                          */
1806                         goto pstripe;
1807                 }
1808
1809                 if (rbio->bioc->raid_map[failb] == RAID5_P_STRIPE) {
1810                         raid6_datap_recov(rbio->real_stripes, sectorsize,
1811                                           faila, pointers);
1812                 } else {
1813                         raid6_2data_recov(rbio->real_stripes, sectorsize,
1814                                           faila, failb, pointers);
1815                 }
1816         } else {
1817                 void *p;
1818
1819                 /* Rebuild from P stripe here (raid5 or raid6). */
1820                 ASSERT(failb == -1);
1821 pstripe:
1822                 /* Copy parity block into failed block to start with */
1823                 memcpy(pointers[faila], pointers[rbio->nr_data], sectorsize);
1824
1825                 /* Rearrange the pointer array */
1826                 p = pointers[faila];
1827                 for (stripe_nr = faila; stripe_nr < rbio->nr_data - 1;
1828                      stripe_nr++)
1829                         pointers[stripe_nr] = pointers[stripe_nr + 1];
1830                 pointers[rbio->nr_data - 1] = p;
1831
1832                 /* Xor in the rest */
1833                 run_xor(pointers, rbio->nr_data - 1, sectorsize);
1834
1835         }
1836
1837         /*
1838          * No matter if this is a RMW or recovery, we should have all
1839          * failed sectors repaired in the vertical stripe, thus they are now
1840          * uptodate.
1841          * Especially if we determine to cache the rbio, we need to
1842          * have at least all data sectors uptodate.
1843          *
1844          * If possible, also check if the repaired sector matches its data
1845          * checksum.
1846          */
1847         if (faila >= 0) {
1848                 ret = verify_one_sector(rbio, faila, sector_nr);
1849                 if (ret < 0)
1850                         goto cleanup;
1851
1852                 sector = rbio_stripe_sector(rbio, faila, sector_nr);
1853                 sector->uptodate = 1;
1854         }
1855         if (failb >= 0) {
1856                 ret = verify_one_sector(rbio, failb, sector_nr);
1857                 if (ret < 0)
1858                         goto cleanup;
1859
1860                 sector = rbio_stripe_sector(rbio, failb, sector_nr);
1861                 sector->uptodate = 1;
1862         }
1863
1864 cleanup:
1865         for (stripe_nr = rbio->real_stripes - 1; stripe_nr >= 0; stripe_nr--)
1866                 kunmap_local(unmap_array[stripe_nr]);
1867         return ret;
1868 }
1869
1870 static int recover_sectors(struct btrfs_raid_bio *rbio)
1871 {
1872         void **pointers = NULL;
1873         void **unmap_array = NULL;
1874         int sectornr;
1875         int ret = 0;
1876
1877         /*
1878          * @pointers array stores the pointer for each sector.
1879          *
1880          * @unmap_array stores copy of pointers that does not get reordered
1881          * during reconstruction so that kunmap_local works.
1882          */
1883         pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
1884         unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
1885         if (!pointers || !unmap_array) {
1886                 ret = -ENOMEM;
1887                 goto out;
1888         }
1889
1890         if (rbio->operation == BTRFS_RBIO_READ_REBUILD ||
1891             rbio->operation == BTRFS_RBIO_REBUILD_MISSING) {
1892                 spin_lock(&rbio->bio_list_lock);
1893                 set_bit(RBIO_RMW_LOCKED_BIT, &rbio->flags);
1894                 spin_unlock(&rbio->bio_list_lock);
1895         }
1896
1897         index_rbio_pages(rbio);
1898
1899         for (sectornr = 0; sectornr < rbio->stripe_nsectors; sectornr++) {
1900                 ret = recover_vertical(rbio, sectornr, pointers, unmap_array);
1901                 if (ret < 0)
1902                         break;
1903         }
1904
1905 out:
1906         kfree(pointers);
1907         kfree(unmap_array);
1908         return ret;
1909 }
1910
1911 static void recover_rbio(struct btrfs_raid_bio *rbio)
1912 {
1913         struct bio_list bio_list = BIO_EMPTY_LIST;
1914         int total_sector_nr;
1915         int ret = 0;
1916
1917         /*
1918          * Either we're doing recover for a read failure or degraded write,
1919          * caller should have set error bitmap correctly.
1920          */
1921         ASSERT(bitmap_weight(rbio->error_bitmap, rbio->nr_sectors));
1922
1923         /* For recovery, we need to read all sectors including P/Q. */
1924         ret = alloc_rbio_pages(rbio);
1925         if (ret < 0)
1926                 goto out;
1927
1928         index_rbio_pages(rbio);
1929
1930         /*
1931          * Read everything that hasn't failed. However this time we will
1932          * not trust any cached sector.
1933          * As we may read out some stale data but higher layer is not reading
1934          * that stale part.
1935          *
1936          * So here we always re-read everything in recovery path.
1937          */
1938         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
1939              total_sector_nr++) {
1940                 int stripe = total_sector_nr / rbio->stripe_nsectors;
1941                 int sectornr = total_sector_nr % rbio->stripe_nsectors;
1942                 struct sector_ptr *sector;
1943
1944                 /*
1945                  * Skip the range which has error.  It can be a range which is
1946                  * marked error (for csum mismatch), or it can be a missing
1947                  * device.
1948                  */
1949                 if (!rbio->bioc->stripes[stripe].dev->bdev ||
1950                     test_bit(total_sector_nr, rbio->error_bitmap)) {
1951                         /*
1952                          * Also set the error bit for missing device, which
1953                          * may not yet have its error bit set.
1954                          */
1955                         set_bit(total_sector_nr, rbio->error_bitmap);
1956                         continue;
1957                 }
1958
1959                 sector = rbio_stripe_sector(rbio, stripe, sectornr);
1960                 ret = rbio_add_io_sector(rbio, &bio_list, sector, stripe,
1961                                          sectornr, REQ_OP_READ);
1962                 if (ret < 0) {
1963                         bio_list_put(&bio_list);
1964                         goto out;
1965                 }
1966         }
1967
1968         submit_read_wait_bio_list(rbio, &bio_list);
1969         ret = recover_sectors(rbio);
1970 out:
1971         rbio_orig_end_io(rbio, errno_to_blk_status(ret));
1972 }
1973
1974 static void recover_rbio_work(struct work_struct *work)
1975 {
1976         struct btrfs_raid_bio *rbio;
1977
1978         rbio = container_of(work, struct btrfs_raid_bio, work);
1979         if (!lock_stripe_add(rbio))
1980                 recover_rbio(rbio);
1981 }
1982
1983 static void recover_rbio_work_locked(struct work_struct *work)
1984 {
1985         recover_rbio(container_of(work, struct btrfs_raid_bio, work));
1986 }
1987
1988 static void set_rbio_raid6_extra_error(struct btrfs_raid_bio *rbio, int mirror_num)
1989 {
1990         bool found = false;
1991         int sector_nr;
1992
1993         /*
1994          * This is for RAID6 extra recovery tries, thus mirror number should
1995          * be large than 2.
1996          * Mirror 1 means read from data stripes. Mirror 2 means rebuild using
1997          * RAID5 methods.
1998          */
1999         ASSERT(mirror_num > 2);
2000         for (sector_nr = 0; sector_nr < rbio->stripe_nsectors; sector_nr++) {
2001                 int found_errors;
2002                 int faila;
2003                 int failb;
2004
2005                 found_errors = get_rbio_veritical_errors(rbio, sector_nr,
2006                                                          &faila, &failb);
2007                 /* This vertical stripe doesn't have errors. */
2008                 if (!found_errors)
2009                         continue;
2010
2011                 /*
2012                  * If we found errors, there should be only one error marked
2013                  * by previous set_rbio_range_error().
2014                  */
2015                 ASSERT(found_errors == 1);
2016                 found = true;
2017
2018                 /* Now select another stripe to mark as error. */
2019                 failb = rbio->real_stripes - (mirror_num - 1);
2020                 if (failb <= faila)
2021                         failb--;
2022
2023                 /* Set the extra bit in error bitmap. */
2024                 if (failb >= 0)
2025                         set_bit(failb * rbio->stripe_nsectors + sector_nr,
2026                                 rbio->error_bitmap);
2027         }
2028
2029         /* We should found at least one vertical stripe with error.*/
2030         ASSERT(found);
2031 }
2032
2033 /*
2034  * the main entry point for reads from the higher layers.  This
2035  * is really only called when the normal read path had a failure,
2036  * so we assume the bio they send down corresponds to a failed part
2037  * of the drive.
2038  */
2039 void raid56_parity_recover(struct bio *bio, struct btrfs_io_context *bioc,
2040                            int mirror_num)
2041 {
2042         struct btrfs_fs_info *fs_info = bioc->fs_info;
2043         struct btrfs_raid_bio *rbio;
2044
2045         rbio = alloc_rbio(fs_info, bioc);
2046         if (IS_ERR(rbio)) {
2047                 bio->bi_status = errno_to_blk_status(PTR_ERR(rbio));
2048                 bio_endio(bio);
2049                 return;
2050         }
2051
2052         rbio->operation = BTRFS_RBIO_READ_REBUILD;
2053         rbio_add_bio(rbio, bio);
2054
2055         set_rbio_range_error(rbio, bio);
2056
2057         /*
2058          * Loop retry:
2059          * for 'mirror == 2', reconstruct from all other stripes.
2060          * for 'mirror_num > 2', select a stripe to fail on every retry.
2061          */
2062         if (mirror_num > 2)
2063                 set_rbio_raid6_extra_error(rbio, mirror_num);
2064
2065         start_async_work(rbio, recover_rbio_work);
2066 }
2067
2068 static void fill_data_csums(struct btrfs_raid_bio *rbio)
2069 {
2070         struct btrfs_fs_info *fs_info = rbio->bioc->fs_info;
2071         struct btrfs_root *csum_root = btrfs_csum_root(fs_info,
2072                                                        rbio->bioc->raid_map[0]);
2073         const u64 start = rbio->bioc->raid_map[0];
2074         const u32 len = (rbio->nr_data * rbio->stripe_nsectors) <<
2075                         fs_info->sectorsize_bits;
2076         int ret;
2077
2078         /* The rbio should not have its csum buffer initialized. */
2079         ASSERT(!rbio->csum_buf && !rbio->csum_bitmap);
2080
2081         /*
2082          * Skip the csum search if:
2083          *
2084          * - The rbio doesn't belong to data block groups
2085          *   Then we are doing IO for tree blocks, no need to search csums.
2086          *
2087          * - The rbio belongs to mixed block groups
2088          *   This is to avoid deadlock, as we're already holding the full
2089          *   stripe lock, if we trigger a metadata read, and it needs to do
2090          *   raid56 recovery, we will deadlock.
2091          */
2092         if (!(rbio->bioc->map_type & BTRFS_BLOCK_GROUP_DATA) ||
2093             rbio->bioc->map_type & BTRFS_BLOCK_GROUP_METADATA)
2094                 return;
2095
2096         rbio->csum_buf = kzalloc(rbio->nr_data * rbio->stripe_nsectors *
2097                                  fs_info->csum_size, GFP_NOFS);
2098         rbio->csum_bitmap = bitmap_zalloc(rbio->nr_data * rbio->stripe_nsectors,
2099                                           GFP_NOFS);
2100         if (!rbio->csum_buf || !rbio->csum_bitmap) {
2101                 ret = -ENOMEM;
2102                 goto error;
2103         }
2104
2105         ret = btrfs_lookup_csums_bitmap(csum_root, start, start + len - 1,
2106                                         rbio->csum_buf, rbio->csum_bitmap);
2107         if (ret < 0)
2108                 goto error;
2109         if (bitmap_empty(rbio->csum_bitmap, len >> fs_info->sectorsize_bits))
2110                 goto no_csum;
2111         return;
2112
2113 error:
2114         /*
2115          * We failed to allocate memory or grab the csum, but it's not fatal,
2116          * we can still continue.  But better to warn users that RMW is no
2117          * longer safe for this particular sub-stripe write.
2118          */
2119         btrfs_warn_rl(fs_info,
2120 "sub-stripe write for full stripe %llu is not safe, failed to get csum: %d",
2121                         rbio->bioc->raid_map[0], ret);
2122 no_csum:
2123         kfree(rbio->csum_buf);
2124         bitmap_free(rbio->csum_bitmap);
2125         rbio->csum_buf = NULL;
2126         rbio->csum_bitmap = NULL;
2127 }
2128
2129 static int rmw_read_wait_recover(struct btrfs_raid_bio *rbio)
2130 {
2131         struct bio_list bio_list = BIO_EMPTY_LIST;
2132         int total_sector_nr;
2133         int ret = 0;
2134
2135         /*
2136          * Fill the data csums we need for data verification.  We need to fill
2137          * the csum_bitmap/csum_buf first, as our endio function will try to
2138          * verify the data sectors.
2139          */
2140         fill_data_csums(rbio);
2141
2142         /*
2143          * Build a list of bios to read all sectors (including data and P/Q).
2144          *
2145          * This behavior is to compensate the later csum verification and recovery.
2146          */
2147         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
2148              total_sector_nr++) {
2149                 struct sector_ptr *sector;
2150                 int stripe = total_sector_nr / rbio->stripe_nsectors;
2151                 int sectornr = total_sector_nr % rbio->stripe_nsectors;
2152
2153                 sector = rbio_stripe_sector(rbio, stripe, sectornr);
2154                 ret = rbio_add_io_sector(rbio, &bio_list, sector,
2155                                stripe, sectornr, REQ_OP_READ);
2156                 if (ret) {
2157                         bio_list_put(&bio_list);
2158                         return ret;
2159                 }
2160         }
2161
2162         /*
2163          * We may or may not have any corrupted sectors (including missing dev
2164          * and csum mismatch), just let recover_sectors() to handle them all.
2165          */
2166         submit_read_wait_bio_list(rbio, &bio_list);
2167         return recover_sectors(rbio);
2168 }
2169
2170 static void raid_wait_write_end_io(struct bio *bio)
2171 {
2172         struct btrfs_raid_bio *rbio = bio->bi_private;
2173         blk_status_t err = bio->bi_status;
2174
2175         if (err)
2176                 rbio_update_error_bitmap(rbio, bio);
2177         bio_put(bio);
2178         if (atomic_dec_and_test(&rbio->stripes_pending))
2179                 wake_up(&rbio->io_wait);
2180 }
2181
2182 static void submit_write_bios(struct btrfs_raid_bio *rbio,
2183                               struct bio_list *bio_list)
2184 {
2185         struct bio *bio;
2186
2187         atomic_set(&rbio->stripes_pending, bio_list_size(bio_list));
2188         while ((bio = bio_list_pop(bio_list))) {
2189                 bio->bi_end_io = raid_wait_write_end_io;
2190
2191                 if (trace_raid56_write_stripe_enabled()) {
2192                         struct raid56_bio_trace_info trace_info = { 0 };
2193
2194                         bio_get_trace_info(rbio, bio, &trace_info);
2195                         trace_raid56_write_stripe(rbio, bio, &trace_info);
2196                 }
2197                 submit_bio(bio);
2198         }
2199 }
2200
2201 /*
2202  * To determine if we need to read any sector from the disk.
2203  * Should only be utilized in RMW path, to skip cached rbio.
2204  */
2205 static bool need_read_stripe_sectors(struct btrfs_raid_bio *rbio)
2206 {
2207         int i;
2208
2209         for (i = 0; i < rbio->nr_data * rbio->stripe_nsectors; i++) {
2210                 struct sector_ptr *sector = &rbio->stripe_sectors[i];
2211
2212                 /*
2213                  * We have a sector which doesn't have page nor uptodate,
2214                  * thus this rbio can not be cached one, as cached one must
2215                  * have all its data sectors present and uptodate.
2216                  */
2217                 if (!sector->page || !sector->uptodate)
2218                         return true;
2219         }
2220         return false;
2221 }
2222
2223 static void rmw_rbio(struct btrfs_raid_bio *rbio)
2224 {
2225         struct bio_list bio_list;
2226         int sectornr;
2227         int ret = 0;
2228
2229         /*
2230          * Allocate the pages for parity first, as P/Q pages will always be
2231          * needed for both full-stripe and sub-stripe writes.
2232          */
2233         ret = alloc_rbio_parity_pages(rbio);
2234         if (ret < 0)
2235                 goto out;
2236
2237         /*
2238          * Either full stripe write, or we have every data sector already
2239          * cached, can go to write path immediately.
2240          */
2241         if (!rbio_is_full(rbio) && need_read_stripe_sectors(rbio)) {
2242                 /*
2243                  * Now we're doing sub-stripe write, also need all data stripes
2244                  * to do the full RMW.
2245                  */
2246                 ret = alloc_rbio_data_pages(rbio);
2247                 if (ret < 0)
2248                         goto out;
2249
2250                 index_rbio_pages(rbio);
2251
2252                 ret = rmw_read_wait_recover(rbio);
2253                 if (ret < 0)
2254                         goto out;
2255         }
2256
2257         /*
2258          * At this stage we're not allowed to add any new bios to the
2259          * bio list any more, anyone else that wants to change this stripe
2260          * needs to do their own rmw.
2261          */
2262         spin_lock(&rbio->bio_list_lock);
2263         set_bit(RBIO_RMW_LOCKED_BIT, &rbio->flags);
2264         spin_unlock(&rbio->bio_list_lock);
2265
2266         bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors);
2267
2268         index_rbio_pages(rbio);
2269
2270         /*
2271          * We don't cache full rbios because we're assuming
2272          * the higher layers are unlikely to use this area of
2273          * the disk again soon.  If they do use it again,
2274          * hopefully they will send another full bio.
2275          */
2276         if (!rbio_is_full(rbio))
2277                 cache_rbio_pages(rbio);
2278         else
2279                 clear_bit(RBIO_CACHE_READY_BIT, &rbio->flags);
2280
2281         for (sectornr = 0; sectornr < rbio->stripe_nsectors; sectornr++)
2282                 generate_pq_vertical(rbio, sectornr);
2283
2284         bio_list_init(&bio_list);
2285         ret = rmw_assemble_write_bios(rbio, &bio_list);
2286         if (ret < 0)
2287                 goto out;
2288
2289         /* We should have at least one bio assembled. */
2290         ASSERT(bio_list_size(&bio_list));
2291         submit_write_bios(rbio, &bio_list);
2292         wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
2293
2294         /* We may have more errors than our tolerance during the read. */
2295         for (sectornr = 0; sectornr < rbio->stripe_nsectors; sectornr++) {
2296                 int found_errors;
2297
2298                 found_errors = get_rbio_veritical_errors(rbio, sectornr, NULL, NULL);
2299                 if (found_errors > rbio->bioc->max_errors) {
2300                         ret = -EIO;
2301                         break;
2302                 }
2303         }
2304 out:
2305         rbio_orig_end_io(rbio, errno_to_blk_status(ret));
2306 }
2307
2308 static void rmw_rbio_work(struct work_struct *work)
2309 {
2310         struct btrfs_raid_bio *rbio;
2311
2312         rbio = container_of(work, struct btrfs_raid_bio, work);
2313         if (lock_stripe_add(rbio) == 0)
2314                 rmw_rbio(rbio);
2315 }
2316
2317 static void rmw_rbio_work_locked(struct work_struct *work)
2318 {
2319         rmw_rbio(container_of(work, struct btrfs_raid_bio, work));
2320 }
2321
2322 /*
2323  * The following code is used to scrub/replace the parity stripe
2324  *
2325  * Caller must have already increased bio_counter for getting @bioc.
2326  *
2327  * Note: We need make sure all the pages that add into the scrub/replace
2328  * raid bio are correct and not be changed during the scrub/replace. That
2329  * is those pages just hold metadata or file data with checksum.
2330  */
2331
2332 struct btrfs_raid_bio *raid56_parity_alloc_scrub_rbio(struct bio *bio,
2333                                 struct btrfs_io_context *bioc,
2334                                 struct btrfs_device *scrub_dev,
2335                                 unsigned long *dbitmap, int stripe_nsectors)
2336 {
2337         struct btrfs_fs_info *fs_info = bioc->fs_info;
2338         struct btrfs_raid_bio *rbio;
2339         int i;
2340
2341         rbio = alloc_rbio(fs_info, bioc);
2342         if (IS_ERR(rbio))
2343                 return NULL;
2344         bio_list_add(&rbio->bio_list, bio);
2345         /*
2346          * This is a special bio which is used to hold the completion handler
2347          * and make the scrub rbio is similar to the other types
2348          */
2349         ASSERT(!bio->bi_iter.bi_size);
2350         rbio->operation = BTRFS_RBIO_PARITY_SCRUB;
2351
2352         /*
2353          * After mapping bioc with BTRFS_MAP_WRITE, parities have been sorted
2354          * to the end position, so this search can start from the first parity
2355          * stripe.
2356          */
2357         for (i = rbio->nr_data; i < rbio->real_stripes; i++) {
2358                 if (bioc->stripes[i].dev == scrub_dev) {
2359                         rbio->scrubp = i;
2360                         break;
2361                 }
2362         }
2363         ASSERT(i < rbio->real_stripes);
2364
2365         bitmap_copy(&rbio->dbitmap, dbitmap, stripe_nsectors);
2366         return rbio;
2367 }
2368
2369 /* Used for both parity scrub and missing. */
2370 void raid56_add_scrub_pages(struct btrfs_raid_bio *rbio, struct page *page,
2371                             unsigned int pgoff, u64 logical)
2372 {
2373         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
2374         int stripe_offset;
2375         int index;
2376
2377         ASSERT(logical >= rbio->bioc->raid_map[0]);
2378         ASSERT(logical + sectorsize <= rbio->bioc->raid_map[0] +
2379                                        BTRFS_STRIPE_LEN * rbio->nr_data);
2380         stripe_offset = (int)(logical - rbio->bioc->raid_map[0]);
2381         index = stripe_offset / sectorsize;
2382         rbio->bio_sectors[index].page = page;
2383         rbio->bio_sectors[index].pgoff = pgoff;
2384 }
2385
2386 /*
2387  * We just scrub the parity that we have correct data on the same horizontal,
2388  * so we needn't allocate all pages for all the stripes.
2389  */
2390 static int alloc_rbio_essential_pages(struct btrfs_raid_bio *rbio)
2391 {
2392         const u32 sectorsize = rbio->bioc->fs_info->sectorsize;
2393         int total_sector_nr;
2394
2395         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
2396              total_sector_nr++) {
2397                 struct page *page;
2398                 int sectornr = total_sector_nr % rbio->stripe_nsectors;
2399                 int index = (total_sector_nr * sectorsize) >> PAGE_SHIFT;
2400
2401                 if (!test_bit(sectornr, &rbio->dbitmap))
2402                         continue;
2403                 if (rbio->stripe_pages[index])
2404                         continue;
2405                 page = alloc_page(GFP_NOFS);
2406                 if (!page)
2407                         return -ENOMEM;
2408                 rbio->stripe_pages[index] = page;
2409         }
2410         index_stripe_sectors(rbio);
2411         return 0;
2412 }
2413
2414 static int finish_parity_scrub(struct btrfs_raid_bio *rbio, int need_check)
2415 {
2416         struct btrfs_io_context *bioc = rbio->bioc;
2417         const u32 sectorsize = bioc->fs_info->sectorsize;
2418         void **pointers = rbio->finish_pointers;
2419         unsigned long *pbitmap = &rbio->finish_pbitmap;
2420         int nr_data = rbio->nr_data;
2421         int stripe;
2422         int sectornr;
2423         bool has_qstripe;
2424         struct sector_ptr p_sector = { 0 };
2425         struct sector_ptr q_sector = { 0 };
2426         struct bio_list bio_list;
2427         int is_replace = 0;
2428         int ret;
2429
2430         bio_list_init(&bio_list);
2431
2432         if (rbio->real_stripes - rbio->nr_data == 1)
2433                 has_qstripe = false;
2434         else if (rbio->real_stripes - rbio->nr_data == 2)
2435                 has_qstripe = true;
2436         else
2437                 BUG();
2438
2439         if (bioc->num_tgtdevs && bioc->tgtdev_map[rbio->scrubp]) {
2440                 is_replace = 1;
2441                 bitmap_copy(pbitmap, &rbio->dbitmap, rbio->stripe_nsectors);
2442         }
2443
2444         /*
2445          * Because the higher layers(scrubber) are unlikely to
2446          * use this area of the disk again soon, so don't cache
2447          * it.
2448          */
2449         clear_bit(RBIO_CACHE_READY_BIT, &rbio->flags);
2450
2451         if (!need_check)
2452                 goto writeback;
2453
2454         p_sector.page = alloc_page(GFP_NOFS);
2455         if (!p_sector.page)
2456                 return -ENOMEM;
2457         p_sector.pgoff = 0;
2458         p_sector.uptodate = 1;
2459
2460         if (has_qstripe) {
2461                 /* RAID6, allocate and map temp space for the Q stripe */
2462                 q_sector.page = alloc_page(GFP_NOFS);
2463                 if (!q_sector.page) {
2464                         __free_page(p_sector.page);
2465                         p_sector.page = NULL;
2466                         return -ENOMEM;
2467                 }
2468                 q_sector.pgoff = 0;
2469                 q_sector.uptodate = 1;
2470                 pointers[rbio->real_stripes - 1] = kmap_local_page(q_sector.page);
2471         }
2472
2473         bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors);
2474
2475         /* Map the parity stripe just once */
2476         pointers[nr_data] = kmap_local_page(p_sector.page);
2477
2478         for_each_set_bit(sectornr, &rbio->dbitmap, rbio->stripe_nsectors) {
2479                 struct sector_ptr *sector;
2480                 void *parity;
2481
2482                 /* first collect one page from each data stripe */
2483                 for (stripe = 0; stripe < nr_data; stripe++) {
2484                         sector = sector_in_rbio(rbio, stripe, sectornr, 0);
2485                         pointers[stripe] = kmap_local_page(sector->page) +
2486                                            sector->pgoff;
2487                 }
2488
2489                 if (has_qstripe) {
2490                         /* RAID6, call the library function to fill in our P/Q */
2491                         raid6_call.gen_syndrome(rbio->real_stripes, sectorsize,
2492                                                 pointers);
2493                 } else {
2494                         /* raid5 */
2495                         memcpy(pointers[nr_data], pointers[0], sectorsize);
2496                         run_xor(pointers + 1, nr_data - 1, sectorsize);
2497                 }
2498
2499                 /* Check scrubbing parity and repair it */
2500                 sector = rbio_stripe_sector(rbio, rbio->scrubp, sectornr);
2501                 parity = kmap_local_page(sector->page) + sector->pgoff;
2502                 if (memcmp(parity, pointers[rbio->scrubp], sectorsize) != 0)
2503                         memcpy(parity, pointers[rbio->scrubp], sectorsize);
2504                 else
2505                         /* Parity is right, needn't writeback */
2506                         bitmap_clear(&rbio->dbitmap, sectornr, 1);
2507                 kunmap_local(parity);
2508
2509                 for (stripe = nr_data - 1; stripe >= 0; stripe--)
2510                         kunmap_local(pointers[stripe]);
2511         }
2512
2513         kunmap_local(pointers[nr_data]);
2514         __free_page(p_sector.page);
2515         p_sector.page = NULL;
2516         if (q_sector.page) {
2517                 kunmap_local(pointers[rbio->real_stripes - 1]);
2518                 __free_page(q_sector.page);
2519                 q_sector.page = NULL;
2520         }
2521
2522 writeback:
2523         /*
2524          * time to start writing.  Make bios for everything from the
2525          * higher layers (the bio_list in our rbio) and our p/q.  Ignore
2526          * everything else.
2527          */
2528         for_each_set_bit(sectornr, &rbio->dbitmap, rbio->stripe_nsectors) {
2529                 struct sector_ptr *sector;
2530
2531                 sector = rbio_stripe_sector(rbio, rbio->scrubp, sectornr);
2532                 ret = rbio_add_io_sector(rbio, &bio_list, sector, rbio->scrubp,
2533                                          sectornr, REQ_OP_WRITE);
2534                 if (ret)
2535                         goto cleanup;
2536         }
2537
2538         if (!is_replace)
2539                 goto submit_write;
2540
2541         for_each_set_bit(sectornr, pbitmap, rbio->stripe_nsectors) {
2542                 struct sector_ptr *sector;
2543
2544                 sector = rbio_stripe_sector(rbio, rbio->scrubp, sectornr);
2545                 ret = rbio_add_io_sector(rbio, &bio_list, sector,
2546                                        bioc->tgtdev_map[rbio->scrubp],
2547                                        sectornr, REQ_OP_WRITE);
2548                 if (ret)
2549                         goto cleanup;
2550         }
2551
2552 submit_write:
2553         submit_write_bios(rbio, &bio_list);
2554         return 0;
2555
2556 cleanup:
2557         bio_list_put(&bio_list);
2558         return ret;
2559 }
2560
2561 static inline int is_data_stripe(struct btrfs_raid_bio *rbio, int stripe)
2562 {
2563         if (stripe >= 0 && stripe < rbio->nr_data)
2564                 return 1;
2565         return 0;
2566 }
2567
2568 static int recover_scrub_rbio(struct btrfs_raid_bio *rbio)
2569 {
2570         void **pointers = NULL;
2571         void **unmap_array = NULL;
2572         int sector_nr;
2573         int ret = 0;
2574
2575         /*
2576          * @pointers array stores the pointer for each sector.
2577          *
2578          * @unmap_array stores copy of pointers that does not get reordered
2579          * during reconstruction so that kunmap_local works.
2580          */
2581         pointers = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
2582         unmap_array = kcalloc(rbio->real_stripes, sizeof(void *), GFP_NOFS);
2583         if (!pointers || !unmap_array) {
2584                 ret = -ENOMEM;
2585                 goto out;
2586         }
2587
2588         for (sector_nr = 0; sector_nr < rbio->stripe_nsectors; sector_nr++) {
2589                 int dfail = 0, failp = -1;
2590                 int faila;
2591                 int failb;
2592                 int found_errors;
2593
2594                 found_errors = get_rbio_veritical_errors(rbio, sector_nr,
2595                                                          &faila, &failb);
2596                 if (found_errors > rbio->bioc->max_errors) {
2597                         ret = -EIO;
2598                         goto out;
2599                 }
2600                 if (found_errors == 0)
2601                         continue;
2602
2603                 /* We should have at least one error here. */
2604                 ASSERT(faila >= 0 || failb >= 0);
2605
2606                 if (is_data_stripe(rbio, faila))
2607                         dfail++;
2608                 else if (is_parity_stripe(faila))
2609                         failp = faila;
2610
2611                 if (is_data_stripe(rbio, failb))
2612                         dfail++;
2613                 else if (is_parity_stripe(failb))
2614                         failp = failb;
2615                 /*
2616                  * Because we can not use a scrubbing parity to repair the
2617                  * data, so the capability of the repair is declined.  (In the
2618                  * case of RAID5, we can not repair anything.)
2619                  */
2620                 if (dfail > rbio->bioc->max_errors - 1) {
2621                         ret = -EIO;
2622                         goto out;
2623                 }
2624                 /*
2625                  * If all data is good, only parity is correctly, just repair
2626                  * the parity, no need to recover data stripes.
2627                  */
2628                 if (dfail == 0)
2629                         continue;
2630
2631                 /*
2632                  * Here means we got one corrupted data stripe and one
2633                  * corrupted parity on RAID6, if the corrupted parity is
2634                  * scrubbing parity, luckily, use the other one to repair the
2635                  * data, or we can not repair the data stripe.
2636                  */
2637                 if (failp != rbio->scrubp) {
2638                         ret = -EIO;
2639                         goto out;
2640                 }
2641
2642                 ret = recover_vertical(rbio, sector_nr, pointers, unmap_array);
2643                 if (ret < 0)
2644                         goto out;
2645         }
2646 out:
2647         kfree(pointers);
2648         kfree(unmap_array);
2649         return ret;
2650 }
2651
2652 static int scrub_assemble_read_bios(struct btrfs_raid_bio *rbio)
2653 {
2654         struct bio_list bio_list = BIO_EMPTY_LIST;
2655         int total_sector_nr;
2656         int ret = 0;
2657
2658         /* Build a list of bios to read all the missing parts. */
2659         for (total_sector_nr = 0; total_sector_nr < rbio->nr_sectors;
2660              total_sector_nr++) {
2661                 int sectornr = total_sector_nr % rbio->stripe_nsectors;
2662                 int stripe = total_sector_nr / rbio->stripe_nsectors;
2663                 struct sector_ptr *sector;
2664
2665                 /* No data in the vertical stripe, no need to read. */
2666                 if (!test_bit(sectornr, &rbio->dbitmap))
2667                         continue;
2668
2669                 /*
2670                  * We want to find all the sectors missing from the rbio and
2671                  * read them from the disk. If sector_in_rbio() finds a sector
2672                  * in the bio list we don't need to read it off the stripe.
2673                  */
2674                 sector = sector_in_rbio(rbio, stripe, sectornr, 1);
2675                 if (sector)
2676                         continue;
2677
2678                 sector = rbio_stripe_sector(rbio, stripe, sectornr);
2679                 /*
2680                  * The bio cache may have handed us an uptodate sector.  If so,
2681                  * use it.
2682                  */
2683                 if (sector->uptodate)
2684                         continue;
2685
2686                 ret = rbio_add_io_sector(rbio, &bio_list, sector, stripe,
2687                                          sectornr, REQ_OP_READ);
2688                 if (ret) {
2689                         bio_list_put(&bio_list);
2690                         return ret;
2691                 }
2692         }
2693
2694         submit_read_wait_bio_list(rbio, &bio_list);
2695         return 0;
2696 }
2697
2698 static void scrub_rbio(struct btrfs_raid_bio *rbio)
2699 {
2700         bool need_check = false;
2701         int sector_nr;
2702         int ret;
2703
2704         ret = alloc_rbio_essential_pages(rbio);
2705         if (ret)
2706                 goto out;
2707
2708         bitmap_clear(rbio->error_bitmap, 0, rbio->nr_sectors);
2709
2710         ret = scrub_assemble_read_bios(rbio);
2711         if (ret < 0)
2712                 goto out;
2713
2714         /* We may have some failures, recover the failed sectors first. */
2715         ret = recover_scrub_rbio(rbio);
2716         if (ret < 0)
2717                 goto out;
2718
2719         /*
2720          * We have every sector properly prepared. Can finish the scrub
2721          * and writeback the good content.
2722          */
2723         ret = finish_parity_scrub(rbio, need_check);
2724         wait_event(rbio->io_wait, atomic_read(&rbio->stripes_pending) == 0);
2725         for (sector_nr = 0; sector_nr < rbio->stripe_nsectors; sector_nr++) {
2726                 int found_errors;
2727
2728                 found_errors = get_rbio_veritical_errors(rbio, sector_nr, NULL, NULL);
2729                 if (found_errors > rbio->bioc->max_errors) {
2730                         ret = -EIO;
2731                         break;
2732                 }
2733         }
2734 out:
2735         rbio_orig_end_io(rbio, errno_to_blk_status(ret));
2736 }
2737
2738 static void scrub_rbio_work_locked(struct work_struct *work)
2739 {
2740         scrub_rbio(container_of(work, struct btrfs_raid_bio, work));
2741 }
2742
2743 void raid56_parity_submit_scrub_rbio(struct btrfs_raid_bio *rbio)
2744 {
2745         if (!lock_stripe_add(rbio))
2746                 start_async_work(rbio, scrub_rbio_work_locked);
2747 }
2748
2749 /* The following code is used for dev replace of a missing RAID 5/6 device. */
2750
2751 struct btrfs_raid_bio *
2752 raid56_alloc_missing_rbio(struct bio *bio, struct btrfs_io_context *bioc)
2753 {
2754         struct btrfs_fs_info *fs_info = bioc->fs_info;
2755         struct btrfs_raid_bio *rbio;
2756
2757         rbio = alloc_rbio(fs_info, bioc);
2758         if (IS_ERR(rbio))
2759                 return NULL;
2760
2761         rbio->operation = BTRFS_RBIO_REBUILD_MISSING;
2762         bio_list_add(&rbio->bio_list, bio);
2763         /*
2764          * This is a special bio which is used to hold the completion handler
2765          * and make the scrub rbio is similar to the other types
2766          */
2767         ASSERT(!bio->bi_iter.bi_size);
2768
2769         set_rbio_range_error(rbio, bio);
2770
2771         return rbio;
2772 }
2773
2774 void raid56_submit_missing_rbio(struct btrfs_raid_bio *rbio)
2775 {
2776         start_async_work(rbio, recover_rbio_work);
2777 }
This page took 0.194614 seconds and 4 git commands to generate.