diff options
Diffstat (limited to 'drivers/scsi/osd')
-rw-r--r-- | drivers/scsi/osd/osd_initiator.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c index daa4dc17f172..2f2a9910e30e 100644 --- a/drivers/scsi/osd/osd_initiator.c +++ b/drivers/scsi/osd/osd_initiator.c | |||
@@ -1558,18 +1558,25 @@ static int _osd_req_finalize_data_integrity(struct osd_request *or, | |||
1558 | static struct request *_make_request(struct request_queue *q, bool has_write, | 1558 | static struct request *_make_request(struct request_queue *q, bool has_write, |
1559 | struct _osd_io_info *oii, gfp_t flags) | 1559 | struct _osd_io_info *oii, gfp_t flags) |
1560 | { | 1560 | { |
1561 | if (oii->bio) | 1561 | struct request *req; |
1562 | return blk_make_request(q, oii->bio, flags); | 1562 | struct bio *bio = oii->bio; |
1563 | else { | 1563 | int ret; |
1564 | struct request *req; | ||
1565 | |||
1566 | req = blk_get_request(q, has_write ? WRITE : READ, flags); | ||
1567 | if (IS_ERR(req)) | ||
1568 | return req; | ||
1569 | 1564 | ||
1570 | blk_rq_set_block_pc(req); | 1565 | req = blk_get_request(q, has_write ? WRITE : READ, flags); |
1566 | if (IS_ERR(req)) | ||
1571 | return req; | 1567 | return req; |
1568 | blk_rq_set_block_pc(req); | ||
1569 | |||
1570 | for_each_bio(bio) { | ||
1571 | struct bio *bounce_bio = bio; | ||
1572 | |||
1573 | blk_queue_bounce(req->q, &bounce_bio); | ||
1574 | ret = blk_rq_append_bio(req, bounce_bio); | ||
1575 | if (ret) | ||
1576 | return ERR_PTR(ret); | ||
1572 | } | 1577 | } |
1578 | |||
1579 | return req; | ||
1573 | } | 1580 | } |
1574 | 1581 | ||
1575 | static int _init_blk_request(struct osd_request *or, | 1582 | static int _init_blk_request(struct osd_request *or, |