Message ID | 20160916210607.054BF124047@b01ledav002.gho.pok.ibm.com (mailing list archive) |
---|---|
State | Changes Requested, archived |
Headers | show |
Brian King <brking@linux.vnet.ibm.com> writes: > If the ses driver receives a UNIT ATTENTION when issuing > a receive diagnostics while probing a SES device, it > fails to attach with messages such as: > > scsi 1:0:7:0: Failed to get diagnostic page 0x8000002 > scsi 1:0:7:0: Failed to bind enclosure -19 > > Fix this by eating unit attentions for these commands. Reviewed-by: Gabriel Krisman Bertazi <krisman@linux.vnet.ibm.com>
>>>>> "Brian" == Brian King <brking@linux.vnet.ibm.com> writes:
Brian> If the ses driver receives a UNIT ATTENTION when issuing a
Brian> receive diagnostics while probing a SES device, it fails to
Brian> attach with messages such as:
Brian> scsi 1:0:7:0: Failed to get diagnostic page 0x8000002 scsi
Brian> 1:0:7:0: Failed to bind enclosure -19
Brian> Fix this by eating unit attentions for these commands.
James?
On Mon, 2016-09-19 at 11:57 -0400, Martin K. Petersen wrote: > > > > > > "Brian" == Brian King <brking@linux.vnet.ibm.com> writes: > > Brian> If the ses driver receives a UNIT ATTENTION when issuing a > Brian> receive diagnostics while probing a SES device, it fails to > Brian> attach with messages such as: > > Brian> scsi 1:0:7:0: Failed to get diagnostic page 0x8000002 scsi > Brian> 1:0:7:0: Failed to bind enclosure -19 > > Brian> Fix this by eating unit attentions for these commands. > > James? It seems to me that UA handling should be a part of scsi_execute_req (and scsi_execute) ... that is unless anyone can find a caller that would actually be interested. I've been looking but haven't found one so far. James -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, 2016-09-19 at 09:20 -0700, James Bottomley wrote: > On Mon, 2016-09-19 at 11:57 -0400, Martin K. Petersen wrote: > > > > > > > "Brian" == Brian King <brking@linux.vnet.ibm.com> writes: > > > > Brian> If the ses driver receives a UNIT ATTENTION when issuing a > > Brian> receive diagnostics while probing a SES device, it fails to > > Brian> attach with messages such as: > > > > Brian> scsi 1:0:7:0: Failed to get diagnostic page 0x8000002 scsi > > Brian> 1:0:7:0: Failed to bind enclosure -19 > > > > Brian> Fix this by eating unit attentions for these commands. > > > > James? > > It seems to me that UA handling should be a part of scsi_execute_req > (and scsi_execute) ... that is unless anyone can find a caller that > would actually be interested. I've been looking but haven't found one > so far. > > James Since UNIT ATTENTION is usually reporting a condition unrelated to the command that was sent (I'm not sure 29 00 qualifies as unrelated since it indicates loss of device state), we probably shouldn't require every caller to retry on it. Could we handle this internally, (maybe unless it persists for N attempts), before returning? We should still be going through the scsi_check_sense() path and the device handlers need to see the sense. (removed cc: stable from reply) -Ewan -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff -puN drivers/scsi/ses.c~ses_rcv_diag_retry drivers/scsi/ses.c --- linux-2.6.git/drivers/scsi/ses.c~ses_rcv_diag_retry 2016-08-25 18:28:18.720565322 -0500 +++ linux-2.6.git-bjking1/drivers/scsi/ses.c 2016-08-25 18:28:29.687496342 -0500 @@ -86,7 +86,7 @@ static void init_device_slot_control(uns static int ses_recv_diag(struct scsi_device *sdev, int page_code, void *buf, int bufflen) { - int ret; + int ret, retries = SES_RETRIES; unsigned char cmd[] = { RECEIVE_DIAGNOSTIC, 1, /* Set PCV bit */ @@ -96,11 +96,14 @@ static int ses_recv_diag(struct scsi_dev 0 }; unsigned char recv_page_code; + struct scsi_sense_hdr sshdr; - ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, - NULL, SES_TIMEOUT, SES_RETRIES, NULL); - if (unlikely(!ret)) - return ret; + do { + memset(&sshdr, 0, sizeof(sshdr)); + ret = scsi_execute_req(sdev, cmd, DMA_FROM_DEVICE, buf, bufflen, + &sshdr, SES_TIMEOUT, retries, NULL); + } while (scsi_sense_valid(&sshdr) && + sshdr.sense_key == UNIT_ATTENTION && --retries); recv_page_code = ((unsigned char *)buf)[0];
If the ses driver receives a UNIT ATTENTION when issuing a receive diagnostics while probing a SES device, it fails to attach with messages such as: scsi 1:0:7:0: Failed to get diagnostic page 0x8000002 scsi 1:0:7:0: Failed to bind enclosure -19 Fix this by eating unit attentions for these commands. Cc: <stable@vger.kernel.org> Suggested-by: Wen Xiong <wenxiong@linux.vnet.ibm.com> Signed-off-by: Brian King <brking@linux.vnet.ibm.com> --- drivers/scsi/ses.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)