Message ID | 1573746668-6920-1-git-send-email-xiangxia.m.yue@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [net-next] net: openvswitch: don't call pad_packet if not necessary | expand |
On Thu, Nov 14, 2019 at 7:51 AM <xiangxia.m.yue@gmail.com> wrote: > > From: Tonghao Zhang <xiangxia.m.yue@gmail.com> > > The nla_put_u16/nla_put_u32 makes sure that > *attrlen is align. The call tree is that: > > nla_put_u16/nla_put_u32 > -> nla_put attrlen = sizeof(u16) or sizeof(u32) > -> __nla_put attrlen > -> __nla_reserve attrlen > -> skb_put(skb, nla_total_size(attrlen)) > > nla_total_size returns the total length of attribute > including padding. > > Cc: Joe Stringer <joe@ovn.org> > Cc: William Tu <u9012063@gmail.com> > Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com> > --- Acked-by: Pravin B Shelar <pshelar@ovn.org>
From: xiangxia.m.yue@gmail.com Date: Thu, 14 Nov 2019 23:51:08 +0800 > From: Tonghao Zhang <xiangxia.m.yue@gmail.com> > > The nla_put_u16/nla_put_u32 makes sure that > *attrlen is align. The call tree is that: > > nla_put_u16/nla_put_u32 > -> nla_put attrlen = sizeof(u16) or sizeof(u32) > -> __nla_put attrlen > -> __nla_reserve attrlen > -> skb_put(skb, nla_total_size(attrlen)) > > nla_total_size returns the total length of attribute > including padding. > > Cc: Joe Stringer <joe@ovn.org> > Cc: William Tu <u9012063@gmail.com> > Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com> Applied, thanks.
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 8ce1f773378d..93d4991ddc1f 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c @@ -487,23 +487,17 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb, } /* Add OVS_PACKET_ATTR_MRU */ - if (upcall_info->mru) { - if (nla_put_u16(user_skb, OVS_PACKET_ATTR_MRU, - upcall_info->mru)) { - err = -ENOBUFS; - goto out; - } - pad_packet(dp, user_skb); + if (upcall_info->mru && + nla_put_u16(user_skb, OVS_PACKET_ATTR_MRU, upcall_info->mru)) { + err = -ENOBUFS; + goto out; } /* Add OVS_PACKET_ATTR_LEN when packet is truncated */ - if (cutlen > 0) { - if (nla_put_u32(user_skb, OVS_PACKET_ATTR_LEN, - skb->len)) { - err = -ENOBUFS; - goto out; - } - pad_packet(dp, user_skb); + if (cutlen > 0 && + nla_put_u32(user_skb, OVS_PACKET_ATTR_LEN, skb->len)) { + err = -ENOBUFS; + goto out; } /* Add OVS_PACKET_ATTR_HASH */