Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bbb89e3d authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide-cd: unify request end exit path in cdrom_decode_status()



There should be no functionality changes caused by this patch.

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 0d6f7e3a
Loading
Loading
Loading
Loading
+24 −26
Original line number Original line Diff line number Diff line
@@ -332,7 +332,6 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)


	} else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
	} else if (blk_pc_request(rq) || rq->cmd_type == REQ_TYPE_ATA_PC) {
		/* All other functions, except for READ. */
		/* All other functions, except for READ. */
		unsigned long flags;


		/*
		/*
		 * if we have an error, pass back CHECK_CONDITION as the
		 * 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)
		 * remove failed request completely and end it when the
		 * remove failed request completely and end it when the
		 * request sense has completed
		 * request sense has completed
		 */
		 */
		if (stat & ERR_STAT) {
		goto end_request;
			spin_lock_irqsave(&ide_lock, flags);
			blkdev_dequeue_request(rq);
			HWGROUP(drive)->rq = NULL;
			spin_unlock_irqrestore(&ide_lock, flags);

			cdrom_queue_request_sense(drive, rq->sense, rq);
		} else
			cdrom_end_request(drive, 0);


	} else if (blk_fs_request(rq)) {
	} else if (blk_fs_request(rq)) {
		int do_end_request = 0;
		int do_end_request = 0;
@@ -458,9 +449,27 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
		   sense data. We need this in order to perform end of media
		   sense data. We need this in order to perform end of media
		   processing */
		   processing */


		if (do_end_request) {
		if (do_end_request)
			goto end_request;

		/*
		 * If we got a CHECK_CONDITION status,
		 * queue a request sense command.
		 */
		if (stat & ERR_STAT)
			cdrom_queue_request_sense(drive, NULL, NULL);
	} else {
		blk_dump_rq_flags(rq, "ide-cd: bad rq");
		cdrom_end_request(drive, 0);
	}

	/* Retry, or handle the next request. */
	return 1;

end_request:
	if (stat & ERR_STAT) {
	if (stat & ERR_STAT) {
		unsigned long flags;
		unsigned long flags;

		spin_lock_irqsave(&ide_lock, flags);
		spin_lock_irqsave(&ide_lock, flags);
		blkdev_dequeue_request(rq);
		blkdev_dequeue_request(rq);
		HWGROUP(drive)->rq = NULL;
		HWGROUP(drive)->rq = NULL;
@@ -469,18 +478,7 @@ static int cdrom_decode_status(ide_drive_t *drive, int good_stat, int *stat_ret)
		cdrom_queue_request_sense(drive, rq->sense, rq);
		cdrom_queue_request_sense(drive, rq->sense, rq);
	} else
	} else
		cdrom_end_request(drive, 0);
		cdrom_end_request(drive, 0);
		} else {
			/* If we got a CHECK_CONDITION status,
			   queue a request sense command. */
			if (stat & ERR_STAT)
				cdrom_queue_request_sense(drive, NULL, NULL);
		}
	} else {
		blk_dump_rq_flags(rq, "ide-cd: bad rq");
		cdrom_end_request(drive, 0);
	}


	/* Retry, or handle the next request. */
	return 1;
	return 1;
}
}