summaryrefslogtreecommitdiffstats
path: root/sys/cam/cam_periph.c
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>1998-09-20 07:14:36 +0000
committergibbs <gibbs@FreeBSD.org>1998-09-20 07:14:36 +0000
commiteccdd13267ca43b65886118a844bda3818e735ad (patch)
treedd4e56e54a84e22dc6abdedffe70f4ba64fd502f /sys/cam/cam_periph.c
parent4d4fe42f59927e280b028d93edde2a0c55c794ef (diff)
downloadFreeBSD-src-eccdd13267ca43b65886118a844bda3818e735ad.zip
FreeBSD-src-eccdd13267ca43b65886118a844bda3818e735ad.tar.gz
cam_xpt.c:
Add quirk entry for a Samsung drive that doesn't like experiencing the queue full condition. Bump the timeouts for all probe activities to 60s. We don't know what the seletion timeout (or equivelent on other mediums) is for controllers, which can make the transactions at the tail end of a parallel probe take a while to complete. The DPT seems to be a card that takes a long time to see a selection timeout. cam_periph.c: Don't call a device "gone" after a single selection timeout. We need to come up with a better policy. Until that time, you'll have to manually re-scan a bus via camcontrol for the system to decide that a device is really gone. This should give devices experiencing temporary insanity to escape death.
Diffstat (limited to 'sys/cam/cam_periph.c')
-rw-r--r--sys/cam/cam_periph.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index 3465b03..3870eaa 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -26,7 +26,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id$
+ * $Id: cam_periph.c,v 1.1 1998/09/15 06:33:23 gibbs Exp $
*/
#include <sys/param.h>
@@ -1422,10 +1422,16 @@ cam_periph_error(union ccb *ccb, cam_flags camflags,
break;
case CAM_SEL_TIMEOUT:
{
+ /*
+ * XXX
+ * A single selection timeout should not be enough
+ * to invalidate a device. We should retry for multiple
+ * seconds assuming this isn't a probe. We'll probably
+ * need a special flag for that.
+ */
+#if 0
struct cam_path *newpath;
- error = ENXIO;
-
/* Should we do more if we can't create the path?? */
if (xpt_create_path(&newpath, xpt_path_periph(ccb->ccb_h.path),
xpt_path_path_id(ccb->ccb_h.path),
@@ -1438,7 +1444,8 @@ cam_periph_error(union ccb *ccb, cam_flags camflags,
*/
xpt_async(AC_LOST_DEVICE, newpath, NULL);
xpt_free_path(newpath);
-
+#endif
+ error = ENXIO;
break;
}
case CAM_REQ_INVALID:
OpenPOWER on IntegriCloud