diff options
Diffstat (limited to 'drivers/scsi/osst.c')
-rw-r--r-- | drivers/scsi/osst.c | 15 |
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 */ |
323 | static void osst_end_async(struct request *req, int update) | 323 | static 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; |