<br><br>
<div class="gmail_quote">On Fri, Sep 11, 2009 at 8:43 AM, Jeff Layton <span dir="ltr">&lt;<a href="mailto:jlayton@redhat.com">jlayton@redhat.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div>
<div></div>
<div class="h5">On Wed, 9 Sep 2009 03:40:13 -0500<br>Shirish Pargaonkar &lt;<a href="mailto:shirishpargaonkar@gmail.com">shirishpargaonkar@gmail.com</a>&gt; wrote:<br><br>&gt; - Enable such that partial/shorts sends can be resent/retried_for_send<br>
&gt; - Keep the midQ entry by marking it for resend/retry_sending in case<br>&gt; of EAGAIN error<br>&gt;<br>&gt;<br>&gt; diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c<br>&gt; index 1da4ab2..92fa1ad 100644<br>&gt; --- a/fs/cifs/transport.c<br>
&gt; +++ b/fs/cifs/transport.c<br>&gt; @@ -269,6 +269,7 @@ smb_sendv(struct TCP_Server_Info *server, struct<br>&gt; kvec *iov, int n_vec)<br>&gt;                    to kill the socket so the server throws away the partial<br>
&gt;                    SMB */<br>&gt;                 server-&gt;tcpStatus = CifsNeedReconnect;<br>&gt; +               rc = -EAGAIN;<br>&gt;         }<br>&gt;<br>&gt;         if (rc &lt; 0) {<br>&gt; @@ -505,8 +506,13 @@ SendReceive2(const unsigned int xid, struct<br>
&gt; cifsSesInfo *ses,<br>&gt;         mutex_unlock(&amp;ses-&gt;server-&gt;srv_mutex);<br>&gt;         cifs_small_buf_release(in_buf);<br>&gt;<br>&gt; -       if (rc &lt; 0)<br>&gt; -               goto out;<br>&gt; +       if (rc &lt; 0) {<br>
&gt; +               if (rc == -EAGAIN) {<br>&gt; +                       midQ-&gt;midState = MID_RETRY_NEEDED;<br>&gt; +                       goto outagain;<br>&gt; +               } else<br>&gt; +                       goto out;<br>
&gt; +       }<br>&gt;<br>&gt;         if (long_op == CIFS_STD_OP)<br>&gt;                 timeout = 15 * HZ;<br>&gt; @@ -623,6 +629,7 @@ SendReceive2(const unsigned int xid, struct<br>&gt; cifsSesInfo *ses,<br>&gt;<br>&gt;  out:<br>
&gt;         DeleteMidQEntry(midQ);<br>&gt; +outagain:<br>&gt;         atomic_dec(&amp;ses-&gt;server-&gt;inFlight);<br>&gt;         wake_up(&amp;ses-&gt;server-&gt;request_q);<br>&gt;<br>&gt; @@ -697,8 +704,13 @@ SendReceive(const unsigned int xid, struct<br>
&gt; cifsSesInfo *ses,<br>&gt;  #endif<br>&gt;         mutex_unlock(&amp;ses-&gt;server-&gt;srv_mutex);<br>&gt;<br>&gt; -       if (rc &lt; 0)<br>&gt; -               goto out;<br>&gt; +       if (rc &lt; 0) {<br>&gt; +               if (rc == -EAGAIN) {<br>
&gt; +                       midQ-&gt;midState = MID_RETRY_NEEDED;<br>&gt; +                       goto outagain;<br>&gt; +               } else<br>&gt; +                       goto out;<br>&gt; +       }<br>&gt;<br>&gt;         if (long_op == CIFS_STD_OP)<br>
&gt;                 timeout = 15 * HZ;<br>&gt; @@ -807,6 +819,7 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,<br>&gt;<br>&gt;  out:<br>&gt;         DeleteMidQEntry(midQ);<br>&gt; +outagain:<br>&gt;         atomic_dec(&amp;ses-&gt;server-&gt;inFlight);<br>
&gt;         wake_up(&amp;ses-&gt;server-&gt;request_q);<br><br></div></div>Patch looks reasonably sane. Could you outline what problem this is<br>intended to solve?<br><br>Also what about SendReceiveBlockingLock? Doesn&#39;t it need a similar<br>
change?<br><font color="#888888"><br>--<br>Jeff Layton &lt;<a href="mailto:jlayton@redhat.com">jlayton@redhat.com</a>&gt;<br></font></blockquote></div>
<div> </div>
<div> </div>
<div>We were abandoing the command that was partially sent, now a partially sent</div>
<div>command, on reconnect, will be treated like other commands that timed out</div>
<div>and get marked for retry.</div>
<div> </div>
<div><br> </div>