summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/osst.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/osst.c')
-rw-r--r--drivers/scsi/osst.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/scsi/osst.c b/drivers/scsi/osst.c
index e8196c55b633..d314aa5c71cf 100644
--- a/drivers/scsi/osst.c
+++ b/drivers/scsi/osst.c
@@ -322,6 +322,7 @@ static int osst_chk_result(struct osst_tape * STp, struct osst_request * SRpnt)
322/* Wakeup from interrupt */ 322/* Wakeup from interrupt */
323static void osst_end_async(struct request *req, int update) 323static void osst_end_async(struct request *req, int update)
324{ 324{
325 struct scsi_request *rq = scsi_req(req);
325 struct osst_request *SRpnt = req->end_io_data; 326 struct osst_request *SRpnt = req->end_io_data;
326 struct osst_tape *STp = SRpnt->stp; 327 struct osst_tape *STp = SRpnt->stp;
327 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data; 328 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
@@ -330,6 +331,8 @@ static void osst_end_async(struct request *req, int update)
330#if DEBUG 331#if DEBUG
331 STp->write_pending = 0; 332 STp->write_pending = 0;
332#endif 333#endif
334 if (rq->sense_len)
335 memcpy(SRpnt->sense, rq->sense, SCSI_SENSE_BUFFERSIZE);
333 if (SRpnt->waiting) 336 if (SRpnt->waiting)
334 complete(SRpnt->waiting); 337 complete(SRpnt->waiting);
335 338
@@ -357,6 +360,7 @@ static int osst_execute(struct osst_request *SRpnt, const unsigned char *cmd,
357 int use_sg, int timeout, int retries) 360 int use_sg, int timeout, int retries)
358{ 361{
359 struct request *req; 362 struct request *req;
363 struct scsi_request *rq;
360 struct page **pages = NULL; 364 struct page **pages = NULL;
361 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data; 365 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data;
362 366
@@ -367,7 +371,8 @@ static int osst_execute(struct osst_request *SRpnt, const unsigned char *cmd,
367 if (IS_ERR(req)) 371 if (IS_ERR(req))
368 return DRIVER_ERROR << 24; 372 return DRIVER_ERROR << 24;
369 373
370 blk_rq_set_block_pc(req); 374 rq = scsi_req(req);
375 scsi_req_init(req);
371 req->rq_flags |= RQF_QUIET; 376 req->rq_flags |= RQF_QUIET;
372 377
373 SRpnt->bio = NULL; 378 SRpnt->bio = NULL;
@@ -404,11 +409,9 @@ static int osst_execute(struct osst_request *SRpnt, const unsigned char *cmd,
404 goto free_req; 409 goto free_req;
405 } 410 }
406 411
407 req->cmd_len = cmd_len; 412 rq->cmd_len = cmd_len;
408 memset(req->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */ 413 memset(rq->cmd, 0, BLK_MAX_CDB); /* ATAPI hates garbage after CDB */
409 memcpy(req->cmd, cmd, req->cmd_len); 414 memcpy(rq->cmd, cmd, rq->cmd_len);
410 req->sense = SRpnt->sense;
411 req->sense_len = 0;
412 req->timeout = timeout; 415 req->timeout = timeout;
413 req->retries = retries; 416 req->retries = retries;
414 req->end_io_data = SRpnt; 417 req->end_io_data = SRpnt;