On Mon, 2011-05-16 at 23:04 +0300, Tomas Winkler wrote: > 2011/5/16 Emmanuel Grumbach <egrumbach@xxxxxxxxx>: > > 2011/5/16 MichaÅ MirosÅaw <mirqus@xxxxxxxxx>: > >> W dniu 16 maja 2011 14:59 uÅytkownik Emmanuel Grumbach > >> <egrumbach@xxxxxxxxx> napisaÅ: > >>> 2011/5/16 MichaÅ MirosÅaw <mirqus@xxxxxxxxx>: > >>>> 2011/5/16 Emmanuel Grumbach <egrumbach@xxxxxxxxx>: > >>>>> I would like to be able to deliver the same page several times to the > >>>>> stack without having the stack consume it before the last time I > >>>>> deliver it. > >>>>> Of course I would like to avoid cloning it. > >>>> > >>>> Just do get_page() on the page having another packet in it before > >>>> passing skb up. > >>>> > >>> > >>> I can see the path: > >>> __kfree_skb -> skb_release_all -> skb_release_data -> put_page > >>> put_page will free the page iff the _count variable reaches 0. Of course, > >>> _count is incremented by get_page. > >>> > >>> I will give it try. > >>> > >>> I understand that this will work regardless the order given to > >>> alloc_pages right ? > >> > >> Yes. Remember that if you put a lot of packets in a big-order page > >> then the memory will be freed only after all packets are freed. > > > > Sure. Thanks for the help. > > How it is ensured that skb manipulation won't corrupt another packet > on the same page? Fragments attached to an skb are always treated as read-only. The headers will be copied into the skb's header buffer and may be modified there. Ben. -- Ben Hutchings, Senior Software Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html