aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-02-01 17:09:28 -0500
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-02-01 17:09:28 -0500
commitbbb89e3d7a7da7a4bac535c42da05143b2db5d71 (patch)
treea911dc16ebb41009b174095c4c3e704a39486b16
parent0d6f7e3a1845165b81adab3fc5fd13916f22aa61 (diff)
ide-cd: unify request end exit path in cdrom_decode_status()
There should be no functionality changes caused by this patch. Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
-rw-r--r--drivers/ide/ide-cd.c50
1 files changed, 24 insertions, 26 deletions
diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 9d2e458250ba..c758e63b0fca 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -332,7 +332,6 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
332 332
333 } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) { 333 } else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
334 /* All other functions, except for READ. */ 334 /* All other functions, except for READ. */
335 unsigned long flags;
336 335
337 /* 336 /*
338 * if we have an error, pass back CHECK_CONDITION as the 337 * if we have an error, pass back CHECK_CONDITION as the
@@ -370,15 +369,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
370 * remove failed request completely and end it when the 369 * remove failed request completely and end it when the
371 * request sense has completed 370 * request sense has completed
372 */ 371 */
373 if (stat & ERR_STAT) { 372 goto end_request;
374 spin_lock_irqsave(&ide_lock, flags);
375 blkdev_dequeue_request(rq);
376 HWGROUP(drive)->rq = NULL;
377 spin_unlock_irqrestore(&ide_lock, flags);
378
379 cdrom_queue_request_sense(drive, rq->sense, rq);
380 } else
381 cdrom_end_request(drive, 0);
382 373
383 } else if (blk_fs_request(rq)) { 374 } else if (blk_fs_request(rq)) {
384 int do_end_request = 0; 375 int do_end_request = 0;
@@ -458,23 +449,15 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
458 sense data. We need this in order to perform end of media 449 sense data. We need this in order to perform end of media
459 processing */ 450 processing */
460 451
461 if (do_end_request) { 452 if (do_end_request)
462 if (stat & ERR_STAT) { 453 goto end_request;
463 unsigned long flags;
464 spin_lock_irqsave(&ide_lock, flags);
465 blkdev_dequeue_request(rq);
466 HWGROUP(drive)->rq = NULL;
467 spin_unlock_irqrestore(&ide_lock, flags);
468 454
469 cdrom_queue_request_sense(drive, rq->sense, rq); 455 /*
470 } else 456 * If we got a CHECK_CONDITION status,
471 cdrom_end_request(drive, 0); 457 * queue a request sense command.
472 } else { 458 */
473 /* If we got a CHECK_CONDITION status, 459 if (stat & ERR_STAT)
474 queue a request sense command. */ 460 cdrom_queue_request_sense(drive, NULL, NULL);
475 if (stat & ERR_STAT)
476 cdrom_queue_request_sense(drive, NULL, NULL);
477 }
478 } else { 461 } else {
479 blk_dump_rq_flags(rq, "ide-cd: bad rq"); 462 blk_dump_rq_flags(rq, "ide-cd: bad rq");
480 cdrom_end_request(drive, 0); 463 cdrom_end_request(drive, 0);
@@ -482,6 +465,21 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
482 465
483 /* Retry, or handle the next request. */ 466 /* Retry, or handle the next request. */
484 return 1; 467 return 1;
468
469end_request:
470 if (stat & ERR_STAT) {
471 unsigned long flags;
472
473 spin_lock_irqsave(&ide_lock, flags);
474 blkdev_dequeue_request(rq);
475 HWGROUP(drive)->rq = NULL;
476 spin_unlock_irqrestore(&ide_lock, flags);
477
478 cdrom_queue_request_sense(drive, rq->sense, rq);
479 } else
480 cdrom_end_request(drive, 0);
481
482 return 1;
485} 483}
486 484
487static int cdrom_timer_expiry(ide_drive_t *drive) 485static int cdrom_timer_expiry(ide_drive_t *drive)