diff options
author | Christoph Hellwig <hch@lst.de> | 2017-04-24 19:05:12 -0400 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-04-25 13:00:39 -0400 |
commit | d227ec267ff4fa91ac2db9965d5392cf825be511 (patch) | |
tree | 0b5e59f91953f978987a605732fccf9c6a28441d /drivers/scsi | |
parent | 6eadc61224666dcc79763dc21749b5f809d82140 (diff) | |
download | linux-d227ec267ff4fa91ac2db9965d5392cf825be511.tar.bz2 |
scsi: sd: Cleanup sd_done sense data handling
Use a switch for the sense key, and remove two pointless variables that
are only used once.
[mkp: Added UNMAP comment and removed good_bytes based on comment from
Damien]
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/sd.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 1cc5dd20e2f2..7aa00d95f69f 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -1815,8 +1815,6 @@ static int sd_done(struct scsi_cmnd *SCpnt) struct request *req = SCpnt->request; int sense_valid = 0; int sense_deferred = 0; - unsigned char op = SCpnt->cmnd[0]; - unsigned char unmap = SCpnt->cmnd[1] & 8; switch (req_op(req)) { case REQ_OP_DISCARD: @@ -1874,26 +1872,27 @@ static int sd_done(struct scsi_cmnd *SCpnt) good_bytes = sd_completed_bytes(SCpnt); break; case ILLEGAL_REQUEST: - if (sshdr.asc == 0x10) /* DIX: Host detected corruption */ + switch (sshdr.asc) { + case 0x10: /* DIX: Host detected corruption */ good_bytes = sd_completed_bytes(SCpnt); - /* INVALID COMMAND OPCODE or INVALID FIELD IN CDB */ - if (sshdr.asc == 0x20 || sshdr.asc == 0x24) { - switch (op) { + break; + case 0x20: /* INVALID COMMAND OPCODE */ + case 0x24: /* INVALID FIELD IN CDB */ + switch (SCpnt->cmnd[0]) { case UNMAP: sd_config_discard(sdkp, SD_LBP_DISABLE); break; case WRITE_SAME_16: case WRITE_SAME: - if (unmap) + if (SCpnt->cmnd[1] & 8) { /* UNMAP */ sd_config_discard(sdkp, SD_LBP_DISABLE); - else { + } else { sdkp->device->no_write_same = 1; sd_config_write_same(sdkp); - - good_bytes = 0; req->__data_len = blk_rq_bytes(req); req->rq_flags |= RQF_QUIET; } + break; } } break; |