changeset 14134:720a35f9c957

3994 uscsi_timeout of 0 sent to ses target driver can hang processes in biowait with a cmd stuck in HBA. Reviewed by: Dan McDonald <danmcd@nexenta.com> Reviewed by: Jason King <jason.brian.king@gmail.com> Approved by: Richard Lowe <richlowe@richlowe.net>
author Kevin Crowe <kevin.crowe@nexenta.com>
date Wed, 07 Aug 2013 13:34:06 -0400
parents 4caa3904e52a
children 62094c23dbe2
files usr/src/uts/common/io/scsi/targets/ses.c
diffstat 1 files changed, 5 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/scsi/targets/ses.c	Tue Aug 13 07:32:14 2013 +0200
+++ b/usr/src/uts/common/io/scsi/targets/ses.c	Wed Aug 07 13:34:06 2013 -0400
@@ -24,6 +24,7 @@
  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  * Copyright (c) 2011 Bayard G. Bell. All rights reserved.
+ * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  */
 
 #include <sys/modctl.h>
@@ -1103,7 +1104,10 @@
 	if (pkt == (struct scsi_pkt *)NULL)
 		return;
 	bcopy(scmd->uscsi_cdb, pkt->pkt_cdbp, (size_t)scmd->uscsi_cdblen);
-	pkt->pkt_time = scmd->uscsi_timeout;
+
+	/* Set an upper bound timeout of ses_io_time if zero is passed in */
+	pkt->pkt_time = (scmd->uscsi_timeout == 0) ?
+	    ses_io_time : scmd->uscsi_timeout;
 
 	pkt->pkt_comp = ses_callback;
 	pkt->pkt_private = (opaque_t)ssc;