# HG changeset patch # User bo zhou - Sun Microsystems - Beijing China # Date 1256783274 -28800 # Node ID 65dc46bd2696aecefe1edf0196372129aa4b1cc0 # Parent f2a954d6028e8fae2c8a1eda5ae56564a75d2b17 6886284 ST driver hangs on persistent reserve out - register diff -r f2a954d6028e -r 65dc46bd2696 usr/src/uts/common/io/scsi/targets/st.c --- a/usr/src/uts/common/io/scsi/targets/st.c Wed Oct 28 15:30:45 2009 -0700 +++ b/usr/src/uts/common/io/scsi/targets/st.c Thu Oct 29 10:27:54 2009 +0800 @@ -16881,6 +16881,20 @@ } /* + * If we have already set a scsi II reserve and get a + * conflict on a scsi III type reserve fail without + * any attempt to recover. + */ + if ((un->un_rsvd_status & ST_RESERVE | ST_PRESERVE_RESERVE) && + (errinfo->ei_failed_pkt.pkt_cdbp[0] == + SCMD_PERSISTENT_RESERVE_OUT) || + (errinfo->ei_failed_pkt.pkt_cdbp[0] == + SCMD_PERSISTENT_RESERVE_IN)) { + st_recov_ret(un, errinfo, COMMAND_DONE_EACCES); + return; + } + + /* * If scsi II lost reserve try and get it back. */ if ((((un->un_rsvd_status &