On Tue, Dec 22, 2020 at 1:17 PM Jonathan Lemon <jonathan.le...@gmail.com> wrote: > > On Tue, Dec 22, 2020 at 10:00:37AM -0500, Willem de Bruijn wrote: > > On Mon, Dec 21, 2020 at 7:09 PM Jonathan Lemon <jonathan.le...@gmail.com> > > wrote: > > > > > > From: Jonathan Lemon <b...@fb.com> > > > > > > Currently, an ubuf is attached to a new skb, the skb zc_flags > > > is initialized to a fixed value. Instead of doing this, set > > > the default zc_flags in the ubuf, and have new skb's inherit > > > from this default. > > > > > > This is needed when setting up different zerocopy types. > > > > > > Signed-off-by: Jonathan Lemon <jonathan.le...@gmail.com> > > > --- > > > include/linux/skbuff.h | 3 ++- > > > net/core/skbuff.c | 1 + > > > 2 files changed, 3 insertions(+), 1 deletion(-) > > > > > > diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h > > > index da0c1dddd0da..b90be4b0b2de 100644 > > > --- a/include/linux/skbuff.h > > > +++ b/include/linux/skbuff.h > > > @@ -478,6 +478,7 @@ struct ubuf_info { > > > }; > > > }; > > > refcount_t refcnt; > > > + u8 zc_flags; > > > > > > struct mmpin { > > > struct user_struct *user; > > > > When allocating ubuf_info for msg_zerocopy, we actually allocate the > > notification skb, to be sure that notifications won't be dropped due > > to memory pressure at notification time. We actually allocate the skb > > and place ubuf_info in skb->cb[]. > > > > The struct is exactly 48 bytes on 64-bit platforms, filling all of cb. > > This new field fills a 4B hole, so it should still be fine. > > Yes, I was careful not to increase the size. I have future changes > for this structure, moving 'struct mmpin' into a union. Making the > flags 16 bits shouldn't be a problem either. > > > > Just being very explicit, as this is a fragile bit of code. Come to > > think of it, this probably deserves a BUILD_BUG_ON. > > You mean like the one which exists in sock_zerocopy_alloc()? > > BUILD_BUG_ON(sizeof(*uarg) > sizeof(skb->cb));
Ah good. Yes. I should have remembered that was there.