Lines Matching refs:bio
54 #define IO_BLOCKED ((struct bio *)1)
59 #define IO_MADE_GOOD ((struct bio *)2)
61 #define BIO_SPECIAL(bio) ((unsigned long)bio <= 2) argument
101 struct bio *bio; in r1buf_pool_alloc() local
113 bio = bio_kmalloc(gfp_flags, RESYNC_PAGES); in r1buf_pool_alloc()
114 if (!bio) in r1buf_pool_alloc()
116 r1_bio->bios[j] = bio; in r1buf_pool_alloc()
129 bio = r1_bio->bios[j]; in r1buf_pool_alloc()
130 bio->bi_vcnt = RESYNC_PAGES; in r1buf_pool_alloc()
132 if (bio_alloc_pages(bio, gfp_flags)) in r1buf_pool_alloc()
186 struct bio **bio = r1_bio->bios + i; in put_all_bios() local
187 if (!BIO_SPECIAL(*bio)) in put_all_bios()
188 bio_put(*bio); in put_all_bios()
189 *bio = NULL; in put_all_bios()
207 struct bio *bio = r1_bio->bios[i]; in put_buf() local
208 if (bio->bi_end_io) in put_buf()
239 struct bio *bio = r1_bio->master_bio; in call_bio_endio() local
243 sector_t bi_sector = bio->bi_iter.bi_sector; in call_bio_endio()
245 if (bio->bi_phys_segments) { in call_bio_endio()
248 bio->bi_phys_segments--; in call_bio_endio()
249 done = (bio->bi_phys_segments == 0); in call_bio_endio()
260 bio->bi_error = -EIO; in call_bio_endio()
263 bio_endio(bio); in call_bio_endio()
274 struct bio *bio = r1_bio->master_bio; in raid_end_bio_io() local
279 (bio_data_dir(bio) == WRITE) ? "write" : "read", in raid_end_bio_io()
280 (unsigned long long) bio->bi_iter.bi_sector, in raid_end_bio_io()
281 (unsigned long long) bio_end_sector(bio) - 1); in raid_end_bio_io()
302 static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio) in find_bio_disk() argument
309 if (r1_bio->bios[mirror] == bio) in find_bio_disk()
318 static void raid1_end_read_request(struct bio *bio) in raid1_end_read_request() argument
320 int uptodate = !bio->bi_error; in raid1_end_read_request()
321 struct r1bio *r1_bio = bio->bi_private; in raid1_end_read_request()
403 static void raid1_end_write_request(struct bio *bio) in raid1_end_write_request() argument
405 struct r1bio *r1_bio = bio->bi_private; in raid1_end_write_request()
408 struct bio *to_put = NULL; in raid1_end_write_request()
410 mirror = find_bio_disk(r1_bio, bio); in raid1_end_write_request()
415 if (bio->bi_error) { in raid1_end_write_request()
439 to_put = bio; in raid1_end_write_request()
476 struct bio *mbio = r1_bio->master_bio; in raid1_end_write_request()
750 struct bio *bio; in flush_pending_writes() local
751 bio = bio_list_get(&conf->pending_bio_list); in flush_pending_writes()
759 while (bio) { /* submit pending writes */ in flush_pending_writes()
760 struct bio *next = bio->bi_next; in flush_pending_writes()
761 bio->bi_next = NULL; in flush_pending_writes()
762 if (unlikely((bio->bi_rw & REQ_DISCARD) && in flush_pending_writes()
763 !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) in flush_pending_writes()
765 bio_endio(bio); in flush_pending_writes()
767 generic_make_request(bio); in flush_pending_writes()
768 bio = next; in flush_pending_writes()
839 static bool need_to_wait_for_sync(struct r1conf *conf, struct bio *bio) in need_to_wait_for_sync() argument
843 if (conf->array_frozen || !bio) in need_to_wait_for_sync()
845 else if (conf->barrier && bio_data_dir(bio) == WRITE) { in need_to_wait_for_sync()
847 >= bio_end_sector(bio)) || in need_to_wait_for_sync()
849 <= bio->bi_iter.bi_sector)) in need_to_wait_for_sync()
858 static sector_t wait_barrier(struct r1conf *conf, struct bio *bio) in wait_barrier() argument
863 if (need_to_wait_for_sync(conf, bio)) { in wait_barrier()
885 if (bio && bio_data_dir(bio) == WRITE) { in wait_barrier()
886 if (bio->bi_iter.bi_sector >= conf->next_resync) { in wait_barrier()
893 <= bio->bi_iter.bi_sector) in wait_barrier()
970 static void alloc_behind_pages(struct bio *bio, struct r1bio *r1_bio) in alloc_behind_pages() argument
974 struct bio_vec *bvecs = kzalloc(bio->bi_vcnt * sizeof(struct bio_vec), in alloc_behind_pages()
979 bio_for_each_segment_all(bvec, bio, i) { in alloc_behind_pages()
990 r1_bio->behind_page_count = bio->bi_vcnt; in alloc_behind_pages()
995 for (i = 0; i < bio->bi_vcnt; i++) in alloc_behind_pages()
1000 bio->bi_iter.bi_size); in alloc_behind_pages()
1015 struct bio *bio; in raid1_unplug() local
1029 bio = bio_list_get(&plug->pending); in raid1_unplug()
1033 while (bio) { /* submit pending writes */ in raid1_unplug()
1034 struct bio *next = bio->bi_next; in raid1_unplug()
1035 bio->bi_next = NULL; in raid1_unplug()
1036 if (unlikely((bio->bi_rw & REQ_DISCARD) && in raid1_unplug()
1037 !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) in raid1_unplug()
1039 bio_endio(bio); in raid1_unplug()
1041 generic_make_request(bio); in raid1_unplug()
1042 bio = next; in raid1_unplug()
1047 static void make_request(struct mddev *mddev, struct bio * bio) in make_request() argument
1052 struct bio *read_bio; in make_request()
1056 const int rw = bio_data_dir(bio); in make_request()
1057 const unsigned long do_sync = (bio->bi_rw & REQ_SYNC); in make_request()
1058 const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA)); in make_request()
1059 const unsigned long do_discard = (bio->bi_rw in make_request()
1061 const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME); in make_request()
1076 md_write_start(mddev, bio); /* wait on superblock update early */ in make_request()
1078 if (bio_data_dir(bio) == WRITE && in make_request()
1079 ((bio_end_sector(bio) > mddev->suspend_lo && in make_request()
1080 bio->bi_iter.bi_sector < mddev->suspend_hi) || in make_request()
1083 bio->bi_iter.bi_sector, bio_end_sector(bio))))) { in make_request()
1093 if (bio_end_sector(bio) <= mddev->suspend_lo || in make_request()
1094 bio->bi_iter.bi_sector >= mddev->suspend_hi || in make_request()
1097 bio->bi_iter.bi_sector, bio_end_sector(bio)))) in make_request()
1104 start_next_window = wait_barrier(conf, bio); in make_request()
1115 r1_bio->master_bio = bio; in make_request()
1116 r1_bio->sectors = bio_sectors(bio); in make_request()
1119 r1_bio->sector = bio->bi_iter.bi_sector; in make_request()
1128 bio->bi_phys_segments = 0; in make_request()
1129 bio_clear_flag(bio, BIO_SEG_VALID); in make_request()
1159 read_bio = bio_clone_mddev(bio, GFP_NOIO, mddev); in make_request()
1160 bio_trim(read_bio, r1_bio->sector - bio->bi_iter.bi_sector, in make_request()
1178 - bio->bi_iter.bi_sector); in make_request()
1181 if (bio->bi_phys_segments == 0) in make_request()
1182 bio->bi_phys_segments = 2; in make_request()
1184 bio->bi_phys_segments++; in make_request()
1195 r1_bio->master_bio = bio; in make_request()
1196 r1_bio->sectors = bio_sectors(bio) - sectors_handled; in make_request()
1199 r1_bio->sector = bio->bi_iter.bi_sector + in make_request()
1289 r1_bio->bios[i] = bio; in make_request()
1302 allow_barrier(conf, start_next_window, bio->bi_iter.bi_sector); in make_request()
1304 start_next_window = wait_barrier(conf, bio); in make_request()
1309 if (bio->bi_phys_segments && old && in make_request()
1313 bio->bi_phys_segments == 1); in make_request()
1323 if (bio->bi_phys_segments == 0) in make_request()
1324 bio->bi_phys_segments = 2; in make_request()
1326 bio->bi_phys_segments++; in make_request()
1329 sectors_handled = r1_bio->sector + max_sectors - bio->bi_iter.bi_sector; in make_request()
1336 struct bio *mbio; in make_request()
1340 mbio = bio_clone_mddev(bio, GFP_NOIO, mddev); in make_request()
1341 bio_trim(mbio, r1_bio->sector - bio->bi_iter.bi_sector, max_sectors); in make_request()
1405 if (sectors_handled < bio_sectors(bio)) { in make_request()
1411 r1_bio->master_bio = bio; in make_request()
1412 r1_bio->sectors = bio_sectors(bio) - sectors_handled; in make_request()
1415 r1_bio->sector = bio->bi_iter.bi_sector + sectors_handled; in make_request()
1700 static void end_sync_read(struct bio *bio) in end_sync_read() argument
1702 struct r1bio *r1_bio = bio->bi_private; in end_sync_read()
1711 if (!bio->bi_error) in end_sync_read()
1718 static void end_sync_write(struct bio *bio) in end_sync_write() argument
1720 int uptodate = !bio->bi_error; in end_sync_write()
1721 struct r1bio *r1_bio = bio->bi_private; in end_sync_write()
1728 mirror = find_bio_disk(r1_bio, bio); in end_sync_write()
1805 struct bio *bio = r1_bio->bios[r1_bio->read_disk]; in fix_sync_read_error() local
1827 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1849 bdevname(bio->bi_bdev, b), in fix_sync_read_error()
1883 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1898 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1907 bio->bi_error = 0; in fix_sync_read_error()
1932 struct bio *b = r1_bio->bios[i]; in process_checks()
1969 struct bio *pbio = r1_bio->bios[primary]; in process_checks()
1970 struct bio *sbio = r1_bio->bios[i]; in process_checks()
2009 struct bio *bio, *wbio; in sync_request_write() local
2011 bio = r1_bio->bios[r1_bio->read_disk]; in sync_request_write()
2182 struct bio *wbio; in narrow_write_error()
2231 struct bio *bio = r1_bio->bios[m]; in handle_sync_write_finished() local
2232 if (bio->bi_end_io == NULL) in handle_sync_write_finished()
2234 if (!bio->bi_error && in handle_sync_write_finished()
2238 if (bio->bi_error && in handle_sync_write_finished()
2292 struct bio *bio; in handle_read_error() local
2314 bio = r1_bio->bios[r1_bio->read_disk]; in handle_read_error()
2315 bdevname(bio->bi_bdev, b); in handle_read_error()
2326 if (bio) { in handle_read_error()
2329 bio_put(bio); in handle_read_error()
2332 bio = bio_clone_mddev(r1_bio->master_bio, GFP_NOIO, mddev); in handle_read_error()
2333 bio_trim(bio, r1_bio->sector - bio->bi_iter.bi_sector, in handle_read_error()
2335 r1_bio->bios[r1_bio->read_disk] = bio; in handle_read_error()
2343 bio->bi_iter.bi_sector = r1_bio->sector + rdev->data_offset; in handle_read_error()
2344 bio->bi_bdev = rdev->bdev; in handle_read_error()
2345 bio->bi_end_io = raid1_end_read_request; in handle_read_error()
2346 bio->bi_rw = READ | do_sync; in handle_read_error()
2347 bio->bi_private = r1_bio; in handle_read_error()
2350 struct bio *mbio = r1_bio->master_bio; in handle_read_error()
2360 generic_make_request(bio); in handle_read_error()
2361 bio = NULL; in handle_read_error()
2375 generic_make_request(bio); in handle_read_error()
2482 struct bio *bio; in sync_request() local
2564 bio = r1_bio->bios[i]; in sync_request()
2565 bio_reset(bio); in sync_request()
2573 bio->bi_rw = WRITE; in sync_request()
2574 bio->bi_end_io = end_sync_write; in sync_request()
2600 bio->bi_rw = READ; in sync_request()
2601 bio->bi_end_io = end_sync_read; in sync_request()
2612 bio->bi_rw = WRITE; in sync_request()
2613 bio->bi_end_io = end_sync_write; in sync_request()
2617 if (bio->bi_end_io) { in sync_request()
2619 bio->bi_iter.bi_sector = sector_nr + rdev->data_offset; in sync_request()
2620 bio->bi_bdev = rdev->bdev; in sync_request()
2621 bio->bi_private = r1_bio; in sync_request()
2706 bio = r1_bio->bios[i]; in sync_request()
2707 if (bio->bi_end_io) { in sync_request()
2708 page = bio->bi_io_vec[bio->bi_vcnt].bv_page; in sync_request()
2709 if (bio_add_page(bio, page, len, 0) == 0) { in sync_request()
2711 bio->bi_io_vec[bio->bi_vcnt].bv_page = page; in sync_request()
2714 bio = r1_bio->bios[i]; in sync_request()
2715 if (bio->bi_end_io==NULL) in sync_request()
2718 bio->bi_vcnt--; in sync_request()
2719 bio->bi_iter.bi_size -= len; in sync_request()
2720 bio_clear_flag(bio, BIO_SEG_VALID); in sync_request()
2749 bio = r1_bio->bios[i]; in sync_request()
2750 if (bio->bi_end_io == end_sync_read) { in sync_request()
2752 md_sync_acct(bio->bi_bdev, nr_sectors); in sync_request()
2753 generic_make_request(bio); in sync_request()
2758 bio = r1_bio->bios[r1_bio->read_disk]; in sync_request()
2759 md_sync_acct(bio->bi_bdev, nr_sectors); in sync_request()
2760 generic_make_request(bio); in sync_request()