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. Just being very explicit, as this is a fragile bit of code. Come to think of it, this probably deserves a BUILD_BUG_ON.