Apply by doing:
        cd /usr/src
        patch -p0 < 004_scsi.patch

Rebuild your kernel.

Index: sys/dev/ic/siop.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/siop.c,v
retrieving revision 1.31
retrieving revision 1.31.2.1
diff -u -p -r1.31 -r1.31.2.1
--- sys/dev/ic/siop.c	21 Oct 2003 18:58:49 -0000	1.31
+++ sys/dev/ic/siop.c	30 Apr 2004 22:07:37 -0000	1.31.2.1
@@ -769,6 +769,15 @@ scintr:
 					/* no table to flush here */
 					CALL_SCRIPT(Ent_msgin_ack);
 					return 1;
+				} else if (msg == MSG_EXTENDED &&
+				    extmsg == MSG_EXT_PPR) {
+					/* PPR negotiation rejected */
+					siop_target->target_c.offset = 0;
+					siop_target->target_c.period = 0;
+					siop_target->target_c.status = TARST_ASYNC;
+					siop_target->target_c.flags &= ~(TARF_DT | TARF_ISDT);
+					CALL_SCRIPT(Ent_msgin_ack);
+					return 1;
 				} else if (msg == MSG_SIMPLE_Q_TAG || 
 				    msg == MSG_HEAD_OF_Q_TAG ||
 				    msg == MSG_ORDERED_Q_TAG) {
@@ -1417,7 +1426,6 @@ siop_scsicmd(xs)
 
 						/* Set TARF_DT here because if it is turned off during PPR, it must STAY off! */
 						if ((lun == 0) && 
-						    (((struct scsi_inquiry_data *)xs->data)->flags2 & SID_CLOCKING) &&
 						    (sc->sc_c.features & SF_BUS_ULTRA3))
  							sc->sc_c.targets[target]->flags |= TARF_DT;
 						/* Can't do lun 0 here, because flags not set yet */
Index: sys/dev/ieee1394/fwscsi.c
===================================================================
RCS file: /cvs/src/sys/dev/ieee1394/fwscsi.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -p -r1.14 -r1.14.2.1
--- sys/dev/ieee1394/fwscsi.c	14 Jan 2004 02:00:41 -0000	1.14
+++ sys/dev/ieee1394/fwscsi.c	30 Apr 2004 22:07:37 -0000	1.14.2.1
@@ -301,7 +301,6 @@ fwscsi_attach(struct device *parent, str
 	sc->sc_adapter_link.adapter_softc = sc;
 	sc->sc_adapter_link.flags = 0;
 	sc->sc_adapter_link.inquiry_flags = 0;
-	sc->sc_adapter_link.inquiry_flags2 = 0;
 	sc->sc_adapter_link.quirks |= SDEV_NOTAGS | SDEV_ONLYBIG;
 
 	sc->sc_speed = fwsc->sc_sc1394.sc1394_link_speed;
Index: sys/scsi/scsi_base.c
===================================================================
RCS file: /cvs/src/sys/scsi/scsi_base.c,v
retrieving revision 1.55
retrieving revision 1.55.2.1
diff -u -p -r1.55 -r1.55.2.1
--- sys/scsi/scsi_base.c	14 Mar 2004 22:46:47 -0000	1.55
+++ sys/scsi/scsi_base.c	30 Apr 2004 22:07:37 -0000	1.55.2.1
@@ -311,38 +311,13 @@ scsi_inquire(sc_link, inqbuf, flags)
 	memset(&inqbuf->extra, ' ', sizeof inqbuf->extra);
 
 	/*
-	 * First try for the basic 36 bytes of SCSI2 inquiry information. This
+	 * Ask for only the basic 36 bytes of SCSI2 inquiry information. This
 	 * avoids problems with devices that choke trying to supply more.
 	 */
 	scsi_cmd.length = SID_INQUIRY_HDR + SID_SCSI2_ALEN;
 	error = scsi_scsi_cmd(sc_link, (struct scsi_generic *)&scsi_cmd,
 	    sizeof(scsi_cmd), (u_char *)inqbuf, scsi_cmd.length, 2, 10000, NULL,
 	    SCSI_DATA_IN | flags);
-
-	/*
-	 * If the device can supply more information, ask for as much
-	 * as we can handle or as much as it has, whichever is less.
-	 */
-	if (!error && inqbuf->additional_length > SID_SCSI2_ALEN) {
-		switch (inqbuf->device & SID_QUAL) {
-		case SID_QUAL_RSVD:
-		case SID_QUAL_BAD_LU:
-		case SID_QUAL_LU_OFFLINE:
-			return (0);
-		case SID_QUAL_LU_OK:
-			if ((inqbuf->device & SID_TYPE) == T_NODEVICE)
-				return (0);
-			break;
-		default:
-			break;
-		}
-
-		scsi_cmd.length = min(sizeof(struct scsi_inquiry_data),
-		    SID_INQUIRY_HDR + inqbuf->additional_length);
-		error = scsi_scsi_cmd(sc_link, (struct scsi_generic *)&scsi_cmd,
-		    sizeof(scsi_cmd), (u_char *)inqbuf, scsi_cmd.length, 2,
-		    10000, NULL, SCSI_DATA_IN | flags);
-	}
 
 	return (error);
 }
Index: sys/scsi/scsiconf.c
===================================================================
RCS file: /cvs/src/sys/scsi/scsiconf.c,v
retrieving revision 1.87
retrieving revision 1.87.2.1
diff -u -p -r1.87 -r1.87.2.1
--- sys/scsi/scsiconf.c	10 Mar 2004 01:37:40 -0000	1.87
+++ sys/scsi/scsiconf.c	30 Apr 2004 22:07:37 -0000	1.87.2.1
@@ -634,7 +634,6 @@ scsi_probedev(scsi, inqbuflun0, target, 
 	sc_link->lun = lun;
 	sc_link->device = &probe_switch;
 	sc_link->inquiry_flags = 0;
-	sc_link->inquiry_flags2 = 0;
 
 	SC_DEBUG(sc_link, SDEV_DB2, ("scsi_link created.\n"));
 
@@ -739,7 +738,6 @@ scsi_probedev(scsi, inqbuflun0, target, 
 	 * Save INQUIRY "flags" (SID_Linked, etc.) for low-level drivers.
 	 */
 	sc_link->inquiry_flags = inqbuf.flags;
-	sc_link->inquiry_flags2 = inqbuf.flags2;
 
 	/*
 	 * note what BASIC type of device it is
Index: sys/scsi/scsiconf.h
===================================================================
RCS file: /cvs/src/sys/scsi/scsiconf.h,v
retrieving revision 1.42
retrieving revision 1.42.2.1
diff -u -p -r1.42 -r1.42.2.1
--- sys/scsi/scsiconf.h	10 Mar 2004 01:37:40 -0000	1.42
+++ sys/scsi/scsiconf.h	30 Apr 2004 22:07:37 -0000	1.42.2.1
@@ -199,7 +199,6 @@ struct scsi_link {
 #define	ADEV_NODOORLOCK		0x2000	/* can't lock door */
 #define SDEV_ONLYBIG		0x4000  /* always use READ_BIG and WRITE_BIG */
 	u_int8_t inquiry_flags;		/* copy of flags from probe INQUIRY */
-	u_int8_t inquiry_flags2;	/* copy of flags2 from probe INQUIRY */
 	struct	scsi_device *device;	/* device entry points etc. */
 	void	*device_softc;		/* needed for call to foo_start */
 	struct	scsi_adapter *adapter;	/* adapter entry points etc. */
