summaryrefslogtreecommitdiffstats
path: root/sys/cam/cam_periph.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2015-02-09 09:10:46 +0000
committermav <mav@FreeBSD.org>2015-02-09 09:10:46 +0000
commit4bebe71c84f0bd0869c7bfaeca6c241e354baa56 (patch)
tree913dccf8648e8e1166f2d3a5c95aeb3853dd44e4 /sys/cam/cam_periph.c
parente82104dd187ea82cb8d346ac947106b35ee4cd46 (diff)
downloadFreeBSD-src-4bebe71c84f0bd0869c7bfaeca6c241e354baa56.zip
FreeBSD-src-4bebe71c84f0bd0869c7bfaeca6c241e354baa56.tar.gz
MFC r278111: Retry indefinitely on SCSI BUSY status from VMware disks and CDs.
VMware returns BUSY status when storage has transient connectivity issues. It is often better to wait and let VM admin fix the problem then crash.
Diffstat (limited to 'sys/cam/cam_periph.c')
-rw-r--r--sys/cam/cam_periph.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index 2e23996..87c1bdd 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -1359,8 +1359,8 @@ camperiphscsistatuserror(union ccb *ccb, union ccb **orig_ccb,
* Restart the queue after either another
* command completes or a 1 second timeout.
*/
- if (ccb->ccb_h.retry_count > 0) {
- ccb->ccb_h.retry_count--;
+ if ((sense_flags & SF_RETRY_BUSY) != 0 ||
+ (ccb->ccb_h.retry_count--) > 0) {
error = ERESTART;
*relsim_flags = RELSIM_RELEASE_AFTER_TIMEOUT
| RELSIM_RELEASE_AFTER_CMDCMPLT;
OpenPOWER on IntegriCloud