diff options
Diffstat (limited to 'drivers/s390/cio/device_id.c')
| -rw-r--r-- | drivers/s390/cio/device_id.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/s390/cio/device_id.c b/drivers/s390/cio/device_id.c index a74785b9e4eb..f17275917fe5 100644 --- a/drivers/s390/cio/device_id.c +++ b/drivers/s390/cio/device_id.c | |||
| @@ -191,6 +191,8 @@ __ccw_device_sense_id_start(struct ccw_device *cdev) | |||
| 191 | if ((sch->opm & cdev->private->imask) != 0 && | 191 | if ((sch->opm & cdev->private->imask) != 0 && |
| 192 | cdev->private->iretry > 0) { | 192 | cdev->private->iretry > 0) { |
| 193 | cdev->private->iretry--; | 193 | cdev->private->iretry--; |
| 194 | /* Reset internal retry indication. */ | ||
| 195 | cdev->private->flags.intretry = 0; | ||
| 194 | ret = cio_start (sch, cdev->private->iccws, | 196 | ret = cio_start (sch, cdev->private->iccws, |
| 195 | cdev->private->imask); | 197 | cdev->private->imask); |
| 196 | /* ret is 0, -EBUSY, -EACCES or -ENODEV */ | 198 | /* ret is 0, -EBUSY, -EACCES or -ENODEV */ |
| @@ -237,8 +239,14 @@ ccw_device_check_sense_id(struct ccw_device *cdev) | |||
| 237 | return 0; /* Success */ | 239 | return 0; /* Success */ |
| 238 | } | 240 | } |
| 239 | /* Check the error cases. */ | 241 | /* Check the error cases. */ |
| 240 | if (irb->scsw.fctl & (SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) | 242 | if (irb->scsw.fctl & (SCSW_FCTL_HALT_FUNC | SCSW_FCTL_CLEAR_FUNC)) { |
| 243 | /* Retry Sense ID if requested. */ | ||
| 244 | if (cdev->private->flags.intretry) { | ||
| 245 | cdev->private->flags.intretry = 0; | ||
| 246 | return -EAGAIN; | ||
| 247 | } | ||
| 241 | return -ETIME; | 248 | return -ETIME; |
| 249 | } | ||
| 242 | if (irb->esw.esw0.erw.cons && (irb->ecw[0] & SNS0_CMD_REJECT)) { | 250 | if (irb->esw.esw0.erw.cons && (irb->ecw[0] & SNS0_CMD_REJECT)) { |
| 243 | /* | 251 | /* |
| 244 | * if the device doesn't support the SenseID | 252 | * if the device doesn't support the SenseID |
