diff --git a/sys/netinet/tcp_output.c b/sys/netinet/tcp_output.c
index 2043fc9..43b0737 100644
--- a/sys/netinet/tcp_output.c
+++ b/sys/netinet/tcp_output.c
@@ -939,23 +939,15 @@ send:
 			 * emptied:
 			 */
 			max_len = (tp->t_maxseg - optlen);
-			if ((off + len) < sbavail(&so->so_snd)) {
+			if (len > (max_len << 1)) {
 				moff = len % max_len;
 				if (moff != 0) {
 					len -= moff;
 					sendalot = 1;
 				}
 			}
-
-			/*
-			 * In case there are too many small fragments
-			 * don't use TSO:
-			 */
-			if (len <= max_len) {
-				len = max_len;
-				sendalot = 1;
-				tso = 0;
-			}
+			KASSERT(len >= max_len,
+			    ("[%s:%d]: len < max_len", __func__, __LINE__));
 
 			/*
 			 * Send the FIN in a separate segment
