[linux-cifs-client] [PATCH] return error code for a partial/short send for a retry of the send
Shirish Pargaonkar
shirishpargaonkar at gmail.com
Fri Sep 11 11:06:59 MDT 2009
On Fri, Sep 11, 2009 at 8:43 AM, Jeff Layton <jlayton at redhat.com> wrote:
> On Wed, 9 Sep 2009 03:40:13 -0500
> Shirish Pargaonkar <shirishpargaonkar at gmail.com> wrote:
>
> > - Enable such that partial/shorts sends can be resent/retried_for_send
> > - Keep the midQ entry by marking it for resend/retry_sending in case
> > of EAGAIN error
> >
> >
> > diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
> > index 1da4ab2..92fa1ad 100644
> > --- a/fs/cifs/transport.c
> > +++ b/fs/cifs/transport.c
> > @@ -269,6 +269,7 @@ smb_sendv(struct TCP_Server_Info *server, struct
> > kvec *iov, int n_vec)
> > to kill the socket so the server throws away the
> partial
> > SMB */
> > server->tcpStatus = CifsNeedReconnect;
> > + rc = -EAGAIN;
> > }
> >
> > if (rc < 0) {
> > @@ -505,8 +506,13 @@ SendReceive2(const unsigned int xid, struct
> > cifsSesInfo *ses,
> > mutex_unlock(&ses->server->srv_mutex);
> > cifs_small_buf_release(in_buf);
> >
> > - if (rc < 0)
> > - goto out;
> > + if (rc < 0) {
> > + if (rc == -EAGAIN) {
> > + midQ->midState = MID_RETRY_NEEDED;
> > + goto outagain;
> > + } else
> > + goto out;
> > + }
> >
> > if (long_op == CIFS_STD_OP)
> > timeout = 15 * HZ;
> > @@ -623,6 +629,7 @@ SendReceive2(const unsigned int xid, struct
> > cifsSesInfo *ses,
> >
> > out:
> > DeleteMidQEntry(midQ);
> > +outagain:
> > atomic_dec(&ses->server->inFlight);
> > wake_up(&ses->server->request_q);
> >
> > @@ -697,8 +704,13 @@ SendReceive(const unsigned int xid, struct
> > cifsSesInfo *ses,
> > #endif
> > mutex_unlock(&ses->server->srv_mutex);
> >
> > - if (rc < 0)
> > - goto out;
> > + if (rc < 0) {
> > + if (rc == -EAGAIN) {
> > + midQ->midState = MID_RETRY_NEEDED;
> > + goto outagain;
> > + } else
> > + goto out;
> > + }
> >
> > if (long_op == CIFS_STD_OP)
> > timeout = 15 * HZ;
> > @@ -807,6 +819,7 @@ SendReceive(const unsigned int xid, struct
> cifsSesInfo *ses,
> >
> > out:
> > DeleteMidQEntry(midQ);
> > +outagain:
> > atomic_dec(&ses->server->inFlight);
> > wake_up(&ses->server->request_q);
>
> Patch looks reasonably sane. Could you outline what problem this is
> intended to solve?
>
> Also what about SendReceiveBlockingLock? Doesn't it need a similar
> change?
>
> --
> Jeff Layton <jlayton at redhat.com>
>
We were abandoing the command that was partially sent, now a partially sent
command, on reconnect, will be treated like other commands that timed out
and get marked for retry.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.samba.org/pipermail/linux-cifs-client/attachments/20090911/2e7b7f1c/attachment.html>
More information about the linux-cifs-client
mailing list