diff options
Diffstat (limited to 'sys/cam')
-rw-r--r-- | sys/cam/cam_periph.c | 15 | ||||
-rw-r--r-- | sys/cam/cam_xpt.c | 19 |
2 files changed, 25 insertions, 9 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: diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c index 58d11e0..5c10591 100644 --- a/sys/cam/cam_xpt.c +++ b/sys/cam/cam_xpt.c @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: cam_xpt.c,v 1.7 1998/09/18 19:55:34 ken Exp $ + * $Id: cam_xpt.c,v 1.8 1998/09/20 05:03:34 gibbs Exp $ */ #include <sys/param.h> #include <sys/systm.h> @@ -264,6 +264,15 @@ static struct xpt_quirk_entry xpt_quirk_table[] = { T_DIRECT, SIP_MEDIA_REMOVABLE, "iomega", "jaz*", "*" }, /*quirks*/0, /*mintags*/0, /*maxtags*/0 }, + { + /* + * Doesn't handle queue full condition correctly, + * so we need to limit maxtags to what the device + * can handle instead of determining this automatically. + */ + { T_DIRECT, SIP_MEDIA_FIXED, "SAMSUNG", "WN321010S*", "*" }, + /*quirks*/0, /*mintags*/0, /*maxtags*/32 + }, { /* Doesn't understand EVP Serial Requests */ { @@ -4774,7 +4783,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb) probedone, MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, - /*timeout*/10000); + /*timeout*/60000); break; } case PROBE_INQUIRY: @@ -4814,7 +4823,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb) /*evpd*/FALSE, /*page_code*/0, SSD_MIN_SIZE, - /*timeout*/5 * 1000); + /*timeout*/60 * 1000); break; } case PROBE_MODE_SENSE: @@ -4837,7 +4846,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb) mode_buf, mode_buf_len, SSD_FULL_SIZE, - /*timeout*/5000); + /*timeout*/60000); break; } xpt_print_path(periph->path); @@ -4870,7 +4879,7 @@ probestart(struct cam_periph *periph, union ccb *start_ccb) /*evpd*/TRUE, SVPD_UNIT_SERIAL_NUMBER, SSD_MIN_SIZE, - /*timeout*/5 * 1000); + /*timeout*/60 * 1000); break; } /* |