Page MenuHomeFreeBSD

D30871.diff
No OneTemporary

D30871.diff

diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c
--- a/sys/dev/cxgbe/tom/t4_cpl_io.c
+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c
@@ -1288,7 +1288,21 @@
if (toep->flags & TPF_ABORT_SHUTDOWN)
goto done;
- tp->rcv_nxt++; /* FIN */
+ if (ulp_mode(toep) == ULP_MODE_RDMA ||
+ (ulp_mode(toep) == ULP_MODE_ISCSI && chip_id(sc) >= CHELSIO_T6)) {
+ /*
+ * There might be data received via DDP before the FIN
+ * not reported to the driver. Just assume the
+ * sequence number in the CPL is correct as the
+ * sequence number of the FIN.
+ */
+ } else {
+ KASSERT(tp->rcv_nxt + 1 == be32toh(cpl->rcv_nxt),
+ ("%s: rcv_nxt mismatch: %u %u", __func__, tp->rcv_nxt,
+ be32toh(cpl->rcv_nxt)));
+ }
+
+ tp->rcv_nxt = be32toh(cpl->rcv_nxt);
so = inp->inp_socket;
socantrcvmore(so);
@@ -1300,12 +1314,6 @@
DDP_UNLOCK(toep);
}
- if (ulp_mode(toep) != ULP_MODE_RDMA) {
- KASSERT(tp->rcv_nxt == be32toh(cpl->rcv_nxt),
- ("%s: rcv_nxt mismatch: %u %u", __func__, tp->rcv_nxt,
- be32toh(cpl->rcv_nxt)));
- }
-
switch (tp->t_state) {
case TCPS_SYN_RECEIVED:
tp->t_starttime = ticks;

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 9, 2:59 PM (20 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14562171
Default Alt Text
D30871.diff (1 KB)

Event Timeline