Lines Matching refs:mp_bh
59 static void multipath_reschedule_retry (struct multipath_bh *mp_bh) in multipath_reschedule_retry() argument
62 struct mddev *mddev = mp_bh->mddev; in multipath_reschedule_retry()
66 list_add(&mp_bh->retry_list, &conf->retry_list); in multipath_reschedule_retry()
76 static void multipath_end_bh_io(struct multipath_bh *mp_bh, blk_status_t status) in multipath_end_bh_io() argument
78 struct bio *bio = mp_bh->master_bio; in multipath_end_bh_io()
79 struct mpconf *conf = mp_bh->mddev->private; in multipath_end_bh_io()
83 mempool_free(mp_bh, &conf->pool); in multipath_end_bh_io()
88 struct multipath_bh *mp_bh = bio->bi_private; in multipath_end_request() local
89 struct mpconf *conf = mp_bh->mddev->private; in multipath_end_request()
90 struct md_rdev *rdev = conf->multipaths[mp_bh->path].rdev; in multipath_end_request()
93 multipath_end_bh_io(mp_bh, 0); in multipath_end_request()
99 md_error (mp_bh->mddev, rdev); in multipath_end_request()
103 multipath_reschedule_retry(mp_bh); in multipath_end_request()
105 multipath_end_bh_io(mp_bh, bio->bi_status); in multipath_end_request()
112 struct multipath_bh * mp_bh; in multipath_make_request() local
120 mp_bh = mempool_alloc(&conf->pool, GFP_NOIO); in multipath_make_request()
122 mp_bh->master_bio = bio; in multipath_make_request()
123 mp_bh->mddev = mddev; in multipath_make_request()
125 mp_bh->path = multipath_map(conf); in multipath_make_request()
126 if (mp_bh->path < 0) { in multipath_make_request()
128 mempool_free(mp_bh, &conf->pool); in multipath_make_request()
131 multipath = conf->multipaths + mp_bh->path; in multipath_make_request()
133 bio_init(&mp_bh->bio, NULL, 0); in multipath_make_request()
134 __bio_clone_fast(&mp_bh->bio, bio); in multipath_make_request()
136 mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset; in multipath_make_request()
137 bio_set_dev(&mp_bh->bio, multipath->rdev->bdev); in multipath_make_request()
138 mp_bh->bio.bi_opf |= REQ_FAILFAST_TRANSPORT; in multipath_make_request()
139 mp_bh->bio.bi_end_io = multipath_end_request; in multipath_make_request()
140 mp_bh->bio.bi_private = mp_bh; in multipath_make_request()
141 mddev_check_writesame(mddev, &mp_bh->bio); in multipath_make_request()
142 mddev_check_write_zeroes(mddev, &mp_bh->bio); in multipath_make_request()
143 generic_make_request(&mp_bh->bio); in multipath_make_request()
325 struct multipath_bh *mp_bh; in multipathd() local
337 mp_bh = list_entry(head->prev, struct multipath_bh, retry_list); in multipathd()
341 bio = &mp_bh->bio; in multipathd()
342 bio->bi_iter.bi_sector = mp_bh->master_bio->bi_iter.bi_sector; in multipathd()
344 if ((mp_bh->path = multipath_map (conf))<0) { in multipathd()
348 multipath_end_bh_io(mp_bh, BLK_STS_IOERR); in multipathd()
353 *bio = *(mp_bh->master_bio); in multipathd()
355 conf->multipaths[mp_bh->path].rdev->data_offset; in multipathd()
356 bio_set_dev(bio, conf->multipaths[mp_bh->path].rdev->bdev); in multipathd()
359 bio->bi_private = mp_bh; in multipathd()