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
99 struct bio *bio; in r1buf_pool_alloc() local
111 bio = bio_kmalloc(gfp_flags, RESYNC_PAGES); in r1buf_pool_alloc()
112 if (!bio) in r1buf_pool_alloc()
114 r1_bio->bios[j] = bio; in r1buf_pool_alloc()
127 bio = r1_bio->bios[j]; in r1buf_pool_alloc()
128 bio->bi_vcnt = RESYNC_PAGES; in r1buf_pool_alloc()
130 if (bio_alloc_pages(bio, gfp_flags)) in r1buf_pool_alloc()
184 struct bio **bio = r1_bio->bios + i; in put_all_bios() local
185 if (!BIO_SPECIAL(*bio)) in put_all_bios()
186 bio_put(*bio); in put_all_bios()
187 *bio = NULL; in put_all_bios()
205 struct bio *bio = r1_bio->bios[i]; in put_buf() local
206 if (bio->bi_end_io) in put_buf()
237 struct bio *bio = r1_bio->master_bio; in call_bio_endio() local
241 sector_t bi_sector = bio->bi_iter.bi_sector; in call_bio_endio()
243 if (bio->bi_phys_segments) { in call_bio_endio()
246 bio->bi_phys_segments--; in call_bio_endio()
247 done = (bio->bi_phys_segments == 0); in call_bio_endio()
258 clear_bit(BIO_UPTODATE, &bio->bi_flags); in call_bio_endio()
260 bio_endio(bio, 0); in call_bio_endio()
271 struct bio *bio = r1_bio->master_bio; in raid_end_bio_io() local
276 (bio_data_dir(bio) == WRITE) ? "write" : "read", in raid_end_bio_io()
277 (unsigned long long) bio->bi_iter.bi_sector, in raid_end_bio_io()
278 (unsigned long long) bio_end_sector(bio) - 1); in raid_end_bio_io()
299 static int find_bio_disk(struct r1bio *r1_bio, struct bio *bio) in find_bio_disk() argument
306 if (r1_bio->bios[mirror] == bio) in find_bio_disk()
315 static void raid1_end_read_request(struct bio *bio, int error) in raid1_end_read_request() argument
317 int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); in raid1_end_read_request()
318 struct r1bio *r1_bio = bio->bi_private; in raid1_end_read_request()
400 static void raid1_end_write_request(struct bio *bio, int error) in raid1_end_write_request() argument
402 int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); in raid1_end_write_request()
403 struct r1bio *r1_bio = bio->bi_private; in raid1_end_write_request()
406 struct bio *to_put = NULL; in raid1_end_write_request()
408 mirror = find_bio_disk(r1_bio, bio); in raid1_end_write_request()
437 to_put = bio; in raid1_end_write_request()
474 struct bio *mbio = r1_bio->master_bio; in raid1_end_write_request()
781 struct bio *bio; in flush_pending_writes() local
782 bio = bio_list_get(&conf->pending_bio_list); in flush_pending_writes()
790 while (bio) { /* submit pending writes */ in flush_pending_writes()
791 struct bio *next = bio->bi_next; in flush_pending_writes()
792 bio->bi_next = NULL; in flush_pending_writes()
793 if (unlikely((bio->bi_rw & REQ_DISCARD) && in flush_pending_writes()
794 !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) in flush_pending_writes()
796 bio_endio(bio, 0); in flush_pending_writes()
798 generic_make_request(bio); in flush_pending_writes()
799 bio = next; in flush_pending_writes()
870 static bool need_to_wait_for_sync(struct r1conf *conf, struct bio *bio) in need_to_wait_for_sync() argument
874 if (conf->array_frozen || !bio) in need_to_wait_for_sync()
876 else if (conf->barrier && bio_data_dir(bio) == WRITE) { in need_to_wait_for_sync()
878 >= bio_end_sector(bio)) || in need_to_wait_for_sync()
880 <= bio->bi_iter.bi_sector)) in need_to_wait_for_sync()
889 static sector_t wait_barrier(struct r1conf *conf, struct bio *bio) in wait_barrier() argument
894 if (need_to_wait_for_sync(conf, bio)) { in wait_barrier()
916 if (bio && bio_data_dir(bio) == WRITE) { in wait_barrier()
917 if (bio->bi_iter.bi_sector >= in wait_barrier()
925 <= bio->bi_iter.bi_sector) in wait_barrier()
1002 static void alloc_behind_pages(struct bio *bio, struct r1bio *r1_bio) in alloc_behind_pages() argument
1006 struct bio_vec *bvecs = kzalloc(bio->bi_vcnt * sizeof(struct bio_vec), in alloc_behind_pages()
1011 bio_for_each_segment_all(bvec, bio, i) { in alloc_behind_pages()
1022 r1_bio->behind_page_count = bio->bi_vcnt; in alloc_behind_pages()
1027 for (i = 0; i < bio->bi_vcnt; i++) in alloc_behind_pages()
1032 bio->bi_iter.bi_size); in alloc_behind_pages()
1047 struct bio *bio; in raid1_unplug() local
1061 bio = bio_list_get(&plug->pending); in raid1_unplug()
1065 while (bio) { /* submit pending writes */ in raid1_unplug()
1066 struct bio *next = bio->bi_next; in raid1_unplug()
1067 bio->bi_next = NULL; in raid1_unplug()
1068 if (unlikely((bio->bi_rw & REQ_DISCARD) && in raid1_unplug()
1069 !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) in raid1_unplug()
1071 bio_endio(bio, 0); in raid1_unplug()
1073 generic_make_request(bio); in raid1_unplug()
1074 bio = next; in raid1_unplug()
1079 static void make_request(struct mddev *mddev, struct bio * bio) in make_request() argument
1084 struct bio *read_bio; in make_request()
1088 const int rw = bio_data_dir(bio); in make_request()
1089 const unsigned long do_sync = (bio->bi_rw & REQ_SYNC); in make_request()
1090 const unsigned long do_flush_fua = (bio->bi_rw & (REQ_FLUSH | REQ_FUA)); in make_request()
1091 const unsigned long do_discard = (bio->bi_rw in make_request()
1093 const unsigned long do_same = (bio->bi_rw & REQ_WRITE_SAME); in make_request()
1108 md_write_start(mddev, bio); /* wait on superblock update early */ in make_request()
1110 if (bio_data_dir(bio) == WRITE && in make_request()
1111 ((bio_end_sector(bio) > mddev->suspend_lo && in make_request()
1112 bio->bi_iter.bi_sector < mddev->suspend_hi) || in make_request()
1114 md_cluster_ops->area_resyncing(mddev, bio->bi_iter.bi_sector, bio_end_sector(bio))))) { in make_request()
1124 if (bio_end_sector(bio) <= mddev->suspend_lo || in make_request()
1125 bio->bi_iter.bi_sector >= mddev->suspend_hi || in make_request()
1128 bio->bi_iter.bi_sector, bio_end_sector(bio)))) in make_request()
1135 start_next_window = wait_barrier(conf, bio); in make_request()
1146 r1_bio->master_bio = bio; in make_request()
1147 r1_bio->sectors = bio_sectors(bio); in make_request()
1150 r1_bio->sector = bio->bi_iter.bi_sector; in make_request()
1159 bio->bi_phys_segments = 0; in make_request()
1160 clear_bit(BIO_SEG_VALID, &bio->bi_flags); in make_request()
1190 read_bio = bio_clone_mddev(bio, GFP_NOIO, mddev); in make_request()
1191 bio_trim(read_bio, r1_bio->sector - bio->bi_iter.bi_sector, in make_request()
1209 - bio->bi_iter.bi_sector); in make_request()
1212 if (bio->bi_phys_segments == 0) in make_request()
1213 bio->bi_phys_segments = 2; in make_request()
1215 bio->bi_phys_segments++; in make_request()
1226 r1_bio->master_bio = bio; in make_request()
1227 r1_bio->sectors = bio_sectors(bio) - sectors_handled; in make_request()
1230 r1_bio->sector = bio->bi_iter.bi_sector + in make_request()
1321 r1_bio->bios[i] = bio; in make_request()
1334 allow_barrier(conf, start_next_window, bio->bi_iter.bi_sector); in make_request()
1336 start_next_window = wait_barrier(conf, bio); in make_request()
1341 if (bio->bi_phys_segments && old && in make_request()
1345 bio->bi_phys_segments == 1); in make_request()
1355 if (bio->bi_phys_segments == 0) in make_request()
1356 bio->bi_phys_segments = 2; in make_request()
1358 bio->bi_phys_segments++; in make_request()
1361 sectors_handled = r1_bio->sector + max_sectors - bio->bi_iter.bi_sector; in make_request()
1368 struct bio *mbio; in make_request()
1372 mbio = bio_clone_mddev(bio, GFP_NOIO, mddev); in make_request()
1373 bio_trim(mbio, r1_bio->sector - bio->bi_iter.bi_sector, max_sectors); in make_request()
1437 if (sectors_handled < bio_sectors(bio)) { in make_request()
1443 r1_bio->master_bio = bio; in make_request()
1444 r1_bio->sectors = bio_sectors(bio) - sectors_handled; in make_request()
1447 r1_bio->sector = bio->bi_iter.bi_sector + sectors_handled; in make_request()
1739 static void end_sync_read(struct bio *bio, int error) in end_sync_read() argument
1741 struct r1bio *r1_bio = bio->bi_private; in end_sync_read()
1750 if (test_bit(BIO_UPTODATE, &bio->bi_flags)) in end_sync_read()
1757 static void end_sync_write(struct bio *bio, int error) in end_sync_write() argument
1759 int uptodate = test_bit(BIO_UPTODATE, &bio->bi_flags); in end_sync_write()
1760 struct r1bio *r1_bio = bio->bi_private; in end_sync_write()
1767 mirror = find_bio_disk(r1_bio, bio); in end_sync_write()
1844 struct bio *bio = r1_bio->bios[r1_bio->read_disk]; in fix_sync_read_error() local
1866 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1888 bdevname(bio->bi_bdev, b), in fix_sync_read_error()
1922 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1937 bio->bi_io_vec[idx].bv_page, in fix_sync_read_error()
1946 set_bit(BIO_UPTODATE, &bio->bi_flags); in fix_sync_read_error()
1971 struct bio *b = r1_bio->bios[i]; in process_checks()
2009 struct bio *pbio = r1_bio->bios[primary]; in process_checks()
2010 struct bio *sbio = r1_bio->bios[i]; in process_checks()
2049 struct bio *bio, *wbio; in sync_request_write() local
2051 bio = r1_bio->bios[r1_bio->read_disk]; in sync_request_write()
2222 struct bio *wbio; in narrow_write_error()
2271 struct bio *bio = r1_bio->bios[m]; in handle_sync_write_finished() local
2272 if (bio->bi_end_io == NULL) in handle_sync_write_finished()
2274 if (test_bit(BIO_UPTODATE, &bio->bi_flags) && in handle_sync_write_finished()
2278 if (!test_bit(BIO_UPTODATE, &bio->bi_flags) && in handle_sync_write_finished()
2322 struct bio *bio; in handle_read_error() local
2344 bio = r1_bio->bios[r1_bio->read_disk]; in handle_read_error()
2345 bdevname(bio->bi_bdev, b); in handle_read_error()
2356 if (bio) { in handle_read_error()
2359 bio_put(bio); in handle_read_error()
2362 bio = bio_clone_mddev(r1_bio->master_bio, GFP_NOIO, mddev); in handle_read_error()
2363 bio_trim(bio, r1_bio->sector - bio->bi_iter.bi_sector, in handle_read_error()
2365 r1_bio->bios[r1_bio->read_disk] = bio; in handle_read_error()
2373 bio->bi_iter.bi_sector = r1_bio->sector + rdev->data_offset; in handle_read_error()
2374 bio->bi_bdev = rdev->bdev; in handle_read_error()
2375 bio->bi_end_io = raid1_end_read_request; in handle_read_error()
2376 bio->bi_rw = READ | do_sync; in handle_read_error()
2377 bio->bi_private = r1_bio; in handle_read_error()
2380 struct bio *mbio = r1_bio->master_bio; in handle_read_error()
2390 generic_make_request(bio); in handle_read_error()
2391 bio = NULL; in handle_read_error()
2405 generic_make_request(bio); in handle_read_error()
2489 struct bio *bio; in sync_request() local
2561 bio = r1_bio->bios[i]; in sync_request()
2562 bio_reset(bio); in sync_request()
2570 bio->bi_rw = WRITE; in sync_request()
2571 bio->bi_end_io = end_sync_write; in sync_request()
2597 bio->bi_rw = READ; in sync_request()
2598 bio->bi_end_io = end_sync_read; in sync_request()
2609 bio->bi_rw = WRITE; in sync_request()
2610 bio->bi_end_io = end_sync_write; in sync_request()
2614 if (bio->bi_end_io) { in sync_request()
2616 bio->bi_iter.bi_sector = sector_nr + rdev->data_offset; in sync_request()
2617 bio->bi_bdev = rdev->bdev; in sync_request()
2618 bio->bi_private = r1_bio; in sync_request()
2703 bio = r1_bio->bios[i]; in sync_request()
2704 if (bio->bi_end_io) { in sync_request()
2705 page = bio->bi_io_vec[bio->bi_vcnt].bv_page; in sync_request()
2706 if (bio_add_page(bio, page, len, 0) == 0) { in sync_request()
2708 bio->bi_io_vec[bio->bi_vcnt].bv_page = page; in sync_request()
2711 bio = r1_bio->bios[i]; in sync_request()
2712 if (bio->bi_end_io==NULL) in sync_request()
2715 bio->bi_vcnt--; in sync_request()
2716 bio->bi_iter.bi_size -= len; in sync_request()
2717 __clear_bit(BIO_SEG_VALID, &bio->bi_flags); in sync_request()
2736 bio = r1_bio->bios[i]; in sync_request()
2737 if (bio->bi_end_io == end_sync_read) { in sync_request()
2739 md_sync_acct(bio->bi_bdev, nr_sectors); in sync_request()
2740 generic_make_request(bio); in sync_request()
2745 bio = r1_bio->bios[r1_bio->read_disk]; in sync_request()
2746 md_sync_acct(bio->bi_bdev, nr_sectors); in sync_request()
2747 generic_make_request(bio); in sync_request()