<br><br><div class="gmail_quote">On Sat, Jun 9, 2012 at 8:26 PM, Pranay Kumar Srivastava <span dir="ltr">&lt;<a href="mailto:Pranay.Shrivastava@hcl.com" target="_blank">Pranay.Shrivastava@hcl.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I&#39;ve been trying to understand kernel_sendpage but I&#39;ve not been able to figure it out completely and hopefully someone else knows better so please help me out on this.<br>
<br>
I&#39;m using kernel_sendpage for a TCP connection and it works well when there are lesser number of kernel threads trying to send data using it.<br>
Now the page I hand over to kernel_sendpage is reused again for reading data from the socket and then processing it and then again resending the processed data in the same page again. It&#39;s at maximum 2KB data and never lesser than 120 bytes.<br>

<br>
As I see it in the code, the page isn&#39;t copied in the skb frags array it&#39;s just assigned and get_page is called to increment the page reference count. (I don&#39;t free it anyway until the thread is stopped and it never is unless it gets a signal).<br>

<br>
Now I don&#39;t know wether kernel_sendpage will wait for the page to be sent or it won&#39;t. I&#39;ve tried with MSG_DONTWAIT and passing 0 for flags but after every now and then the problem occurs at client which I&#39;m describing below with the best explanation I could think of...<br>

<br>
        When too many kernel threads are trying to send data using kernel_sendpage, with NO MSG_DONTWAIT flag, then also it seems that this call succeeds? However since I&#39;m reusing the page the data can get overridden by the next sock_recvmsg and when the network stack is ready to send my page it gets garbage data at client?<br>

<br>
The same issue I observed with MSG_DONTWAIT set even in that case the client sometimes get garbage data.<br>
<br>
So my query is,<br>
<br>
To use kernel_sendpage what I need to do in order to be sure that network stack indeed has sent my page and that I can reuse it for sock_recvmsg again.<br>
<br>
Thanks a lot for reading!<br>
<br>
<br>
<br>
<br>
Regards,<br>
Pranay Kr. Srivastava<br>
<a href="mailto:pranay.shrivastava@hcl.com">pranay.shrivastava@hcl.com</a><br>
Software Engineer<br>
ERS,HCL Technologies<br>
A-5, Sector 24, Noida 201301, U.P. (India)<br>
<br>
<br>
<br>
::DISCLAIMER::<br>
----------------------------------------------------------------------------------------------------------------------------------------------------<br>
<br>
The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only.<br>
E-mail transmission is not guaranteed to be secure or error-free as information could be intercepted, corrupted,<br>
lost, destroyed, arrive late or incomplete, or may contain viruses in transmission. The e mail and its contents<br>
(with or without referred errors) shall therefore not attach any liability on the originator or HCL or its affiliates.<br>
Views or opinions, if any, presented in this email are solely those of the author and may not necessarily reflect the<br>
views or opinions of HCL or its affiliates. Any form of reproduction, dissemination, copying, disclosure, modification,<br>
distribution and / or publication of this message without the prior written consent of authorized representative of<br>
HCL is strictly prohibited. If you have received this email in error please delete it and notify the sender immediately.<br>
Before opening any email and/or attachments, please check them for viruses and other defects.<br>
<br>
----------------------------------------------------------------------------------------------------------------------------------------------------<br>
<br>
<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br>Hi,<br><br>I had a brief look at the kernel_sendpage() function. It can call either sock-&gt;ops-&gt;sendpage() if this is set or calls<br><br>sock_no_sendpage() otherwise. If sock_no_sendpage() code path is executed then,<br>
<br>sock_no_sendpage() (kunmaps the page)-&gt; kernel_sendmsg() -&gt; sock_sendmsg() (waits for data to be synced). So, I think you are OK if this is the code path.<br><br>You need to check this in case of sock-&gt;ops-&gt;sendpage().<br>
<br>- Rohan<br>