From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
To: linux-ide@vger.kernel.org
Cc: Borislav Petkov <petkovbb@gmail.com>,
Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH 4/5] ide-cd: unify handling of fs and pc requests in cdrom_decode_status()
Date: Fri, 03 Apr 2009 21:58:17 +0200 [thread overview]
Message-ID: <20090403195817.31438.45522.sendpatchset@localhost.localdomain> (raw)
In-Reply-To: <20090403195757.31438.16866.sendpatchset@localhost.localdomain>
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Subject: [PATCH] ide-cd: unify handling of fs and pc requests in cdrom_decode_status()
Based on earlier work by Borislav Petkov.
Unify handling of fs and pc requests in cdrom_decode_status().
While at it:
- remove unreachable code
The only change in functionality is that for pc requests more
detailed error message will be printed for following sense keys:
* ILLEGAL_REQUEST
* DATA_PROTECT
* MEDIUM_ERROR
* BLANK_CHECK
Cc: Borislav Petkov <petkovbb@googlemail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
---
drivers/ide/ide-cd.c | 70 ++++++++++++++++++---------------------------------
1 file changed, 25 insertions(+), 45 deletions(-)
Index: b/drivers/ide/ide-cd.c
===================================================================
--- a/drivers/ide/ide-cd.c
+++ b/drivers/ide/ide-cd.c
@@ -329,8 +329,8 @@ static int cdrom_decode_status(ide_drive
*/
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
@@ -339,53 +339,17 @@ static int cdrom_decode_status(ide_drive
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 ((rq->cmd_flags & REQ_QUIET) == 0)
- 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 ((rq->cmd_flags & REQ_QUIET) == 0)
+ if (blk_fs_request(rq) &&
+ (rq->cmd_flags & REQ_QUIET) == 0)
printk(KERN_ERR PFX "%s: tray open\n",
drive->name);
} else {
@@ -397,6 +361,8 @@ static int cdrom_decode_status(ide_drive
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.
@@ -405,6 +371,16 @@ static int cdrom_decode_status(ide_drive
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
@@ -432,6 +408,8 @@ static int cdrom_decode_status(ide_drive
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);
@@ -441,6 +419,11 @@ static int cdrom_decode_status(ide_drive
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
@@ -456,9 +439,6 @@ static int cdrom_decode_status(ide_drive
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:
next prev parent reply other threads:[~2009-04-03 19:54 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-03 19:57 [PATCH 1/5] ide-cd: respect REQ_QUIET for fs requests in cdrom_decode_status() Bartlomiej Zolnierkiewicz
2009-04-03 19:58 ` [PATCH 2/5] ide-cd: update debugging support Bartlomiej Zolnierkiewicz
2009-04-03 19:58 ` [PATCH 3/5] ide-cd: convert cdrom_decode_status() to use switch statements Bartlomiej Zolnierkiewicz
2009-04-05 6:09 ` Borislav Petkov
2009-04-05 6:25 ` Borislav Petkov
2009-04-03 19:58 ` Bartlomiej Zolnierkiewicz [this message]
2009-04-05 6:46 ` [PATCH 4/5] ide-cd: unify handling of fs and pc requests in cdrom_decode_status() Borislav Petkov
2009-04-03 19:58 ` [PATCH 5/5] ide-cd: fix intendation " Bartlomiej Zolnierkiewicz
2009-04-05 8:02 ` Borislav Petkov
2009-04-05 5:13 ` [PATCH 1/5] ide-cd: respect REQ_QUIET for fs requests " Borislav Petkov
2009-04-06 20:58 ` Bartlomiej Zolnierkiewicz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090403195817.31438.45522.sendpatchset@localhost.localdomain \
--to=bzolnier@gmail.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=petkovbb@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.