On 07.12.22 10:25, Jan Beulich wrote: > On 07.12.2022 08:23, Juergen Gross wrote: >> Commit ad7f402ae4f4 ("xen/netback: Ensure protocol headers don't fall in >> the non-linear area") introduced a (valid) build warning. >> >> Fix it. >> >> Fixes: ad7f402ae4f4 ("xen/netback: Ensure protocol headers don't fall in the non-linear area") >> Signed-off-by: Juergen Gross > > Reviewed-by: Jan Beulich > >> --- a/drivers/net/xen-netback/netback.c >> +++ b/drivers/net/xen-netback/netback.c >> @@ -530,7 +530,7 @@ static int xenvif_tx_check_gop(struct xenvif_queue *queue, >> const bool sharedslot = nr_frags && >> frag_get_pending_idx(&shinfo->frags[0]) == >> copy_pending_idx(skb, copy_count(skb) - 1); >> - int i, err; >> + int i, err = 0; >> >> for (i = 0; i < copy_count(skb); i++) { >> int newerr; > > I'm afraid other logic (below here) is now slightly wrong as well, in > particular > > /* If the mapping of the first frag was OK, but > * the header's copy failed, and they are > * sharing a slot, send an error > */ > if (i == 0 && !first_shinfo && sharedslot) > xenvif_idx_release(queue, pending_idx, > XEN_NETIF_RSP_ERROR); > else > xenvif_idx_release(queue, pending_idx, > XEN_NETIF_RSP_OKAY); > > which looks to be intended to deal with _only_ failure of the one shared > part of the header, whereas "err" now can indicate an error on any earlier > part as well. The comment at the end of that loop seems to imply this is the desired behavior: /* Remember the error: invalidate all subsequent fragments. */ err = newerr; } Juergen