On Wed, Sep 4, 2024 at 5:18 PM Mina Almasry wrote:
>
> On Tue, Sep 3, 2024 at 2:40 PM Jakub Kicinski wrote:
> >
> > On Sat, 31 Aug 2024 00:43:08 + Mina Almasry wrote:
> > > static inline bool tcp_skb_can_collapse_to(const struct sk_buff *skb)
> > > {
> > > - return likely(!TCP_SKB_CB(sk
On Tue, Sep 3, 2024 at 2:40 PM Jakub Kicinski wrote:
>
> On Sat, 31 Aug 2024 00:43:08 + Mina Almasry wrote:
> > static inline bool tcp_skb_can_collapse_to(const struct sk_buff *skb)
> > {
> > - return likely(!TCP_SKB_CB(skb)->eor);
> > + return likely(!TCP_SKB_CB(skb)->eor && skb_fra
On Sat, 31 Aug 2024 00:43:08 + Mina Almasry wrote:
> static inline bool tcp_skb_can_collapse_to(const struct sk_buff *skb)
> {
> - return likely(!TCP_SKB_CB(skb)->eor);
> + return likely(!TCP_SKB_CB(skb)->eor && skb_frags_readable(skb));
Do you remember why this is here? Both for Rx
For device memory TCP, we expect the skb headers to be available in host
memory for access, and we expect the skb frags to be in device memory
and unaccessible to the host. We expect there to be no mixing and
matching of device memory frags (unaccessible) with host memory frags
(accessible) in the