diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c
index 43db330..ffbaa6d 100644
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -330,8 +330,8 @@
 		 */
 		rq->cmd_flags |= REQ_FAILED;
 		return 2;
-	} else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
-		/* All other functions, except for READ. */
+	} else {
+		int do_end_request = 0;
 
 		/*
 		 * if we have an error, pass back CHECK_CONDITION as the
@@ -340,53 +340,16 @@
 		if (blk_pc_request(rq) && !rq->errors)
 			rq->errors = SAM_STAT_CHECK_CONDITION;
 
-		switch (sense_key) {
-		case NOT_READY:
-			cdrom_saw_media_change(drive);
-			break;
-		case UNIT_ATTENTION:
-			cdrom_saw_media_change(drive);
-			return 0;
-		case ILLEGAL_REQUEST:
-			/*
-			 * Don't print error message for this condition--
-			 * SFF8090i indicates that 5/24/00 is the correct
-			 * response to a request to close the tray if the
-			 * drive doesn't have that capability.
-			 * cdrom_log_sense() knows this!
-			 */
-			if (rq->cmd[0] == GPCMD_START_STOP_UNIT)
-				break;
-			/* fall-through */
-		default:
-			if (!quiet)
-				ide_dump_status(drive, "packet command error",
-						stat);
-		}
-
-		rq->cmd_flags |= REQ_FAILED;
-
-		/*
-		 * instead of playing games with moving completions around,
-		 * remove failed request completely and end it when the
-		 * request sense has completed
-		 */
-		goto end_request;
-
-	} else if (blk_fs_request(rq)) {
-		int do_end_request = 0;
-
-		/* handle errors from READ and WRITE requests */
-
 		if (blk_noretry_request(rq))
 			do_end_request = 1;
 
 		switch (sense_key) {
 		case NOT_READY:
-			if (rq_data_dir(rq) == READ) {
+			if (blk_fs_request(rq) == 0 ||
+			    rq_data_dir(rq) == READ) {
 				cdrom_saw_media_change(drive);
 
-				if (!quiet)
+				if (blk_fs_request(rq) && !quiet)
 					printk(KERN_ERR PFX "%s: tray open\n",
 						drive->name);
 			} else {
@@ -398,6 +361,8 @@
 		case UNIT_ATTENTION:
 			cdrom_saw_media_change(drive);
 
+			if (blk_fs_request(rq) == 0)
+				return 0;
 			/*
 			 * Arrange to retry the request but be sure to give up
 			 * if we've retried too many times.
@@ -406,6 +371,16 @@
 				do_end_request = 1;
 			break;
 		case ILLEGAL_REQUEST:
+			/*
+			 * Don't print error message for this condition--
+			 * SFF8090i indicates that 5/24/00 is the correct
+			 * response to a request to close the tray if the
+			 * drive doesn't have that capability.
+			 * cdrom_log_sense() knows this!
+			 */
+			if (rq->cmd[0] == GPCMD_START_STOP_UNIT)
+				break;
+			/* fall-through */
 		case DATA_PROTECT:
 			/*
 			 * No point in retrying after an illegal request or data
@@ -433,6 +408,8 @@
 			do_end_request = 1;
 			break;
 		default:
+			if (blk_fs_request(rq) == 0)
+				break;
 			if (err & ~ATA_ABORTED) {
 				/* go to the default handler for other errors */
 				ide_error(drive, "cdrom_decode_status", stat);
@@ -442,6 +419,11 @@
 				do_end_request = 1;
 		}
 
+		if (blk_fs_request(rq) == 0) {
+			rq->cmd_flags |= REQ_FAILED;
+			do_end_request = 1;
+		}
+
 		/*
 		 * End a request through request sense analysis when we have
 		 * sense data. We need this in order to perform end of media
@@ -457,9 +439,6 @@
 		if (stat & ATA_ERR)
 			cdrom_queue_request_sense(drive, NULL, NULL);
 		return 1;
-	} else {
-		blk_dump_rq_flags(rq, PFX "bad rq");
-		return 2;
 	}
 
 end_request:
