summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/osd
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/osd')
-rw-r--r--drivers/scsi/osd/osd_initiator.c25
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,
1558static struct request *_make_request(struct request_queue *q, bool has_write, 1558static 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
1575static int _init_blk_request(struct osd_request *or, 1582static int _init_blk_request(struct osd_request *or,