Merge tag 'rust-fixes-6.6' of https://github.com/Rust-for-Linux/linux
[platform/kernel/linux-rpi.git] / fs / btrfs / raid56.h
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 #ifndef BTRFS_RAID56_H
8 #define BTRFS_RAID56_H
9
10 #include <linux/workqueue.h>
11 #include "volumes.h"
12
13 enum btrfs_rbio_ops {
14         BTRFS_RBIO_WRITE,
15         BTRFS_RBIO_READ_REBUILD,
16         BTRFS_RBIO_PARITY_SCRUB,
17 };
18
19 struct btrfs_raid_bio {
20         struct btrfs_io_context *bioc;
21
22         /*
23          * While we're doing RMW on a stripe we put it into a hash table so we
24          * can lock the stripe and merge more rbios into it.
25          */
26         struct list_head hash_list;
27
28         /* LRU list for the stripe cache */
29         struct list_head stripe_cache;
30
31         /* For scheduling work in the helper threads */
32         struct work_struct work;
33
34         /*
35          * bio_list and bio_list_lock are used to add more bios into the stripe
36          * in hopes of avoiding the full RMW
37          */
38         struct bio_list bio_list;
39         spinlock_t bio_list_lock;
40
41         /*
42          * Also protected by the bio_list_lock, the plug list is used by the
43          * plugging code to collect partial bios while plugged.  The stripe
44          * locking code also uses it to hand off the stripe lock to the next
45          * pending IO.
46          */
47         struct list_head plug_list;
48
49         /* Flags that tell us if it is safe to merge with this bio. */
50         unsigned long flags;
51
52         /*
53          * Set if we're doing a parity rebuild for a read from higher up, which
54          * is handled differently from a parity rebuild as part of RMW.
55          */
56         enum btrfs_rbio_ops operation;
57
58         /* How many pages there are for the full stripe including P/Q */
59         u16 nr_pages;
60
61         /* How many sectors there are for the full stripe including P/Q */
62         u16 nr_sectors;
63
64         /* Number of data stripes (no p/q) */
65         u8 nr_data;
66
67         /* Number of all stripes (including P/Q) */
68         u8 real_stripes;
69
70         /* How many pages there are for each stripe */
71         u8 stripe_npages;
72
73         /* How many sectors there are for each stripe */
74         u8 stripe_nsectors;
75
76         /* Stripe number that we're scrubbing  */
77         u8 scrubp;
78
79         /*
80          * Size of all the bios in the bio_list.  This helps us decide if the
81          * rbio maps to a full stripe or not.
82          */
83         int bio_list_bytes;
84
85         refcount_t refs;
86
87         atomic_t stripes_pending;
88
89         wait_queue_head_t io_wait;
90
91         /* Bitmap to record which horizontal stripe has data */
92         unsigned long dbitmap;
93
94         /* Allocated with stripe_nsectors-many bits for finish_*() calls */
95         unsigned long finish_pbitmap;
96
97         /*
98          * These are two arrays of pointers.  We allocate the rbio big enough
99          * to hold them both and setup their locations when the rbio is
100          * allocated.
101          */
102
103         /*
104          * Pointers to pages that we allocated for reading/writing stripes
105          * directly from the disk (including P/Q).
106          */
107         struct page **stripe_pages;
108
109         /* Pointers to the sectors in the bio_list, for faster lookup */
110         struct sector_ptr *bio_sectors;
111
112         /*
113          * For subpage support, we need to map each sector to above
114          * stripe_pages.
115          */
116         struct sector_ptr *stripe_sectors;
117
118         /* Allocated with real_stripes-many pointers for finish_*() calls */
119         void **finish_pointers;
120
121         /*
122          * The bitmap recording where IO errors happened.
123          * Each bit is corresponding to one sector in either bio_sectors[] or
124          * stripe_sectors[] array.
125          *
126          * The reason we don't use another bit in sector_ptr is, we have two
127          * arrays of sectors, and a lot of IO can use sectors in both arrays.
128          * Thus making it much harder to iterate.
129          */
130         unsigned long *error_bitmap;
131
132         /*
133          * Checksum buffer if the rbio is for data.  The buffer should cover
134          * all data sectors (excluding P/Q sectors).
135          */
136         u8 *csum_buf;
137
138         /*
139          * Each bit represents if the corresponding sector has data csum found.
140          * Should only cover data sectors (excluding P/Q sectors).
141          */
142         unsigned long *csum_bitmap;
143 };
144
145 /*
146  * For trace event usage only. Records useful debug info for each bio submitted
147  * by RAID56 to each physical device.
148  *
149  * No matter signed or not, (-1) is always the one indicating we can not grab
150  * the proper stripe number.
151  */
152 struct raid56_bio_trace_info {
153         u64 devid;
154
155         /* The offset inside the stripe. (<= STRIPE_LEN) */
156         u32 offset;
157
158         /*
159          * Stripe number.
160          * 0 is the first data stripe, and nr_data for P stripe,
161          * nr_data + 1 for Q stripe.
162          * >= real_stripes for
163          */
164         u8 stripe_nr;
165 };
166
167 static inline int nr_data_stripes(const struct map_lookup *map)
168 {
169         return map->num_stripes - btrfs_nr_parity_stripes(map->type);
170 }
171
172 static inline int nr_bioc_data_stripes(const struct btrfs_io_context *bioc)
173 {
174         return bioc->num_stripes - btrfs_nr_parity_stripes(bioc->map_type);
175 }
176
177 #define RAID5_P_STRIPE ((u64)-2)
178 #define RAID6_Q_STRIPE ((u64)-1)
179
180 #define is_parity_stripe(x) (((x) == RAID5_P_STRIPE) ||         \
181                              ((x) == RAID6_Q_STRIPE))
182
183 struct btrfs_device;
184
185 void raid56_parity_recover(struct bio *bio, struct btrfs_io_context *bioc,
186                            int mirror_num);
187 void raid56_parity_write(struct bio *bio, struct btrfs_io_context *bioc);
188
189 struct btrfs_raid_bio *raid56_parity_alloc_scrub_rbio(struct bio *bio,
190                                 struct btrfs_io_context *bioc,
191                                 struct btrfs_device *scrub_dev,
192                                 unsigned long *dbitmap, int stripe_nsectors);
193 void raid56_parity_submit_scrub_rbio(struct btrfs_raid_bio *rbio);
194
195 void raid56_parity_cache_data_pages(struct btrfs_raid_bio *rbio,
196                                     struct page **data_pages, u64 data_logical);
197
198 int btrfs_alloc_stripe_hash_table(struct btrfs_fs_info *info);
199 void btrfs_free_stripe_hash_table(struct btrfs_fs_info *info);
200
201 #endif