* David Miller <[EMAIL PROTECTED]> [070126 01:55]: > From: Baruch Even <[EMAIL PROTECTED]> > Date: Thu, 25 Jan 2007 20:29:03 +0200 > > > The sorting of SACK blocks actually munges them rather than sort, causing > > the > > TCP stack to ignore some SACK information and breaking the assumption of > > ordered SACK blocks after sorting. > > > > The sort takes the data from a second buffer which isn't moved causing > > subsequent data moves to occur from the wrong location. The fix is to > > use a temporary buffer as a normal sort does. > > > > Signed-Off-By: Baruch Even <[EMAIL PROTECTED]> > > BTW, in reviewing this I note that there is now only one remaining > use of tp->recv_sack_cache[] and that is the code earlier in this > function which is trying to detect if all we are doing is extending > the leading edge of a SACK block. > > It would be nice to be able to clear out that usage as well, and > remove recv_sack_cache[] and thus make tcp_sock smaller.
You actually need recv_sack_cache to detect if you can use the fast path. Another alternative is to somehow hash the values of the sack blocks but then you rely on probabilty that you will properly detect the ability to use the fast path. Hashing will save some space but you can't get rid of it completely unless you go back to the old and slow method of SACK processing. There were thoughts thrown a while back about using a different data structure, I think you said you started working on something like that. If that comes to fruition the cache might go. FWIW, my other mail about possible bugs actually says that you might need to add another value to check, the number of sack blocks in the cache. Baruch - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html