Message ID | 1374593943-31642-1-git-send-email-f.fainelli@gmail.com |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Tue, 2013-07-23 at 16:39 +0100, Florian Fainelli wrote: > build_skb() specifies that the data parameter must come from a kmalloc'd > area, this is only true if frag_size equals 0, because then build_skb() > will use kzsize(data) to figure out the actual data size. Update the > comment to reflect that special condition. > > Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > --- > net/core/skbuff.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/net/core/skbuff.c b/net/core/skbuff.c > index 20e02d2..d3174db 100644 > --- a/net/core/skbuff.c > +++ b/net/core/skbuff.c > @@ -309,7 +309,8 @@ EXPORT_SYMBOL(__alloc_skb); > * @frag_size: size of fragment, or 0 if head was kmalloced > * > * Allocate a new &sk_buff. Caller provides space holding head and > - * skb_shared_info. @data must have been allocated by kmalloc() > + * skb_shared_info. @data must have been allocated by kmalloc() only if > + * @frag_size is 0. > * The return is the new skb buffer. > * On a failure the return is %NULL, and @data is not freed. > * Notes : Hmm, why not explaining the other case ? (frag_size > 0) -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
2013/7/23 Eric Dumazet <eric.dumazet@gmail.com>: > On Tue, 2013-07-23 at 16:39 +0100, Florian Fainelli wrote: >> build_skb() specifies that the data parameter must come from a kmalloc'd >> area, this is only true if frag_size equals 0, because then build_skb() >> will use kzsize(data) to figure out the actual data size. Update the >> comment to reflect that special condition. >> >> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> >> --- >> net/core/skbuff.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/net/core/skbuff.c b/net/core/skbuff.c >> index 20e02d2..d3174db 100644 >> --- a/net/core/skbuff.c >> +++ b/net/core/skbuff.c >> @@ -309,7 +309,8 @@ EXPORT_SYMBOL(__alloc_skb); >> * @frag_size: size of fragment, or 0 if head was kmalloced >> * >> * Allocate a new &sk_buff. Caller provides space holding head and >> - * skb_shared_info. @data must have been allocated by kmalloc() >> + * skb_shared_info. @data must have been allocated by kmalloc() only if >> + * @frag_size is 0. >> * The return is the new skb buffer. >> * On a failure the return is %NULL, and @data is not freed. >> * Notes : > > Hmm, why not explaining the other case ? (frag_size > 0) Sure, would something like: "@data must have been allocated by kmalloc() if frag_size is 0, otherwise any data buffer (vmalloc, DMA..) is suitable" work for you? -- Florian -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2013-07-23 at 19:04 +0100, Florian Fainelli wrote: > 2013/7/23 Eric Dumazet <eric.dumazet@gmail.com>: > > On Tue, 2013-07-23 at 16:39 +0100, Florian Fainelli wrote: > >> build_skb() specifies that the data parameter must come from a kmalloc'd > >> area, this is only true if frag_size equals 0, because then build_skb() > >> will use kzsize(data) to figure out the actual data size. Update the > >> comment to reflect that special condition. > >> > >> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> > >> --- > >> net/core/skbuff.c | 3 ++- > >> 1 file changed, 2 insertions(+), 1 deletion(-) > >> > >> diff --git a/net/core/skbuff.c b/net/core/skbuff.c > >> index 20e02d2..d3174db 100644 > >> --- a/net/core/skbuff.c > >> +++ b/net/core/skbuff.c > >> @@ -309,7 +309,8 @@ EXPORT_SYMBOL(__alloc_skb); > >> * @frag_size: size of fragment, or 0 if head was kmalloced > >> * > >> * Allocate a new &sk_buff. Caller provides space holding head and > >> - * skb_shared_info. @data must have been allocated by kmalloc() > >> + * skb_shared_info. @data must have been allocated by kmalloc() only if > >> + * @frag_size is 0. > >> * The return is the new skb buffer. > >> * On a failure the return is %NULL, and @data is not freed. > >> * Notes : > > > > Hmm, why not explaining the other case ? (frag_size > 0) > > Sure, would something like: > > "@data must have been allocated by kmalloc() if frag_size is 0, > otherwise any data buffer (vmalloc, DMA..) is suitable" The other case is that the buffer must have been allocated using the page allocator directly. It will be freed using put_page(virt_to_head_page(data)). Using vmalloc() to allocate the buffer would definitely be incorrect. Ben.
On Tue, 2013-07-23 at 19:04 +0100, Florian Fainelli wrote: > Sure, would something like: > > "@data must have been allocated by kmalloc() if frag_size is 0, > otherwise any data buffer (vmalloc, DMA..) is suitable" > Actually not, the other case must be a page frag, because we are going to use get_page() and put_page() during skb lifetime. netlink case is really special/hacky, because it makes sure those get_page()/put_page() calls wont ever happen. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 20e02d2..d3174db 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -309,7 +309,8 @@ EXPORT_SYMBOL(__alloc_skb); * @frag_size: size of fragment, or 0 if head was kmalloced * * Allocate a new &sk_buff. Caller provides space holding head and - * skb_shared_info. @data must have been allocated by kmalloc() + * skb_shared_info. @data must have been allocated by kmalloc() only if + * @frag_size is 0. * The return is the new skb buffer. * On a failure the return is %NULL, and @data is not freed. * Notes :
build_skb() specifies that the data parameter must come from a kmalloc'd area, this is only true if frag_size equals 0, because then build_skb() will use kzsize(data) to figure out the actual data size. Update the comment to reflect that special condition. Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> --- net/core/skbuff.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)