From 8e6401187ef7fb1edc2740832b48bf47ed2c90f2 Mon Sep 17 00:00:00 2001
From: James Bottomley <jejb@titanic.(none)>
Date: Wed, 15 Jun 2005 18:16:09 -0500
Subject: [PATCH] update scsi_wait_req to new format for blk_rq_map_kern()

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
---
 drivers/scsi/scsi_lib.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 253c1a98d159..60f07b6a5ffc 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -246,15 +246,18 @@ void scsi_wait_req(struct scsi_request *sreq, const void *cmnd, void *buffer,
 		   unsigned bufflen, int timeout, int retries)
 {
 	DECLARE_COMPLETION(wait);
+	int write = sreq->sr_data_direction == DMA_TO_DEVICE;
 	struct request *req;
 
-	if (bufflen)
-		req = blk_rq_map_kern(sreq->sr_device->request_queue,
-				      sreq->sr_data_direction == DMA_TO_DEVICE,
-				      buffer, bufflen, __GFP_WAIT);
-	else
-		req = blk_get_request(sreq->sr_device->request_queue, READ,
-				      __GFP_WAIT);
+	req = blk_get_request(sreq->sr_device->request_queue, write,
+			      __GFP_WAIT);
+	if (bufflen && blk_rq_map_kern(sreq->sr_device->request_queue, req,
+				       buffer, bufflen, __GFP_WAIT)) {
+		sreq->sr_result = DRIVER_ERROR << 24;
+		blk_put_request(req);
+		return;
+	}
+
 	req->flags |= REQ_NOMERGE;
 	req->waiting = &wait;
 	req->end_io = scsi_wait_req_end_io;