Lines Matching refs:fbio
166 static int next_repair_mirror(struct btrfs_failed_bio *fbio, int cur_mirror)
168 if (cur_mirror == fbio->num_copies)
169 return cur_mirror + 1 - fbio->num_copies;
173 static int prev_repair_mirror(struct btrfs_failed_bio *fbio, int cur_mirror)
176 return fbio->num_copies;
180 static void btrfs_repair_done(struct btrfs_failed_bio *fbio)
182 if (atomic_dec_and_test(&fbio->repair_count)) {
183 btrfs_orig_bbio_end_io(fbio->bbio);
184 mempool_free(fbio, &btrfs_failed_bio_pool);
191 struct btrfs_failed_bio *fbio = repair_bbio->private;
202 mirror = next_repair_mirror(fbio, mirror);
203 if (mirror == fbio->bbio->mirror_num) {
205 fbio->bbio->bio.bi_status = BLK_STS_IOERR;
214 mirror = prev_repair_mirror(fbio, mirror);
219 } while (mirror != fbio->bbio->mirror_num);
222 btrfs_repair_done(fbio);
236 struct btrfs_failed_bio *fbio)
254 return fbio;
257 if (!fbio) {
258 fbio = mempool_alloc(&btrfs_failed_bio_pool, GFP_NOFS);
259 fbio->bbio = failed_bbio;
260 fbio->num_copies = num_copies;
261 atomic_set(&fbio->repair_count, 1);
264 atomic_inc(&fbio->repair_count);
272 btrfs_bio_init(repair_bbio, fs_info, NULL, fbio);
276 mirror = next_repair_mirror(fbio, failed_bbio->mirror_num);
279 return fbio;
289 struct btrfs_failed_bio *fbio = NULL;
312 fbio = repair_one_sector(bbio, offset, &bv, fbio);
321 if (fbio)
322 btrfs_repair_done(fbio);