Re: [PATCH 03/13] cifs: move mid result processing into common function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, 12 Dec 2010 17:29:58 -0600
Shirish Pargaonkar <shirishpargaonkar@xxxxxxxxx> wrote:

> On Fri, Dec 10, 2010 at 9:44 AM, Jeff Layton <jlayton@xxxxxxxxxx> wrote:
> > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> > ---
> >  fs/cifs/transport.c |  131 ++++++++++++++++++--------------------------------
> >  1 files changed, 47 insertions(+), 84 deletions(-)
> >
> > diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
> > index 9763f89..2d21bbd 100644
> > --- a/fs/cifs/transport.c
> > +++ b/fs/cifs/transport.c
> > @@ -382,6 +382,46 @@ SendReceiveNoRsp(const unsigned int xid, struct cifsSesInfo *ses,
> >        return rc;
> >  }
> >
> > +static int
> > +handle_mid_result(struct mid_q_entry *mid, struct TCP_Server_Info *server)
> > +{
> > +       int rc = 0;
> > +
> > +       spin_lock(&GlobalMid_Lock);
> > +
> > +       if (mid->resp_buf) {
> > +               spin_unlock(&GlobalMid_Lock);
> > +               return rc;
> > +       }
> > +
> > +       cERROR(1, "No response to cmd %d mid %d", mid->command, mid->mid);
> > +       if (mid->midState == MID_REQUEST_SUBMITTED) {
> > +               if (server->tcpStatus == CifsExiting)
> > +                       rc = -EHOSTDOWN;
> > +               else {
> > +                       server->tcpStatus = CifsNeedReconnect;
> > +                       mid->midState = MID_RETRY_NEEDED;
> > +               }
> > +       }
> > +
> > +       if (rc != -EHOSTDOWN) {
> > +               if (mid->midState == MID_RETRY_NEEDED) {
> > +                       rc = -EAGAIN;
> > +                       cFYI(1, "marking request for retry");
> > +               } else {
> > +                       rc = -EIO;
> 
> I think this else part is redundant.  If rc is not EHOSTDOWN,
> which means it is 0, midState will always be MID_RETRY_NEEDED.
> 

I agree, but my goal with this patch is to consolidate the
cut-and-pasted code as-is into a single spot. A later patch will clean
it up.

> > +               }
> > +       }
> > +       spin_unlock(&GlobalMid_Lock);
> > +
> > +       DeleteMidQEntry(mid);
> > +       /* Update # of requests on wire to server */
> > +       atomic_dec(&server->inFlight);
> > +       wake_up(&server->request_q);
> > +
> > +       return rc;
> > +}
> > +
> >  int
> >  SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
> >             struct kvec *iov, int n_vec, int *pRespBufType /* ret */,
> > @@ -485,37 +525,10 @@ SendReceive2(const unsigned int xid, struct cifsSesInfo *ses,
> >        /* No user interrupts in wait - wreaks havoc with performance */
> >        wait_for_response(ses, midQ, timeout, 10 * HZ);
> >
> > -       spin_lock(&GlobalMid_Lock);
> > -
> > -       if (midQ->resp_buf == NULL) {
> > -               cERROR(1, "No response to cmd %d mid %d",
> > -                       midQ->command, midQ->mid);
> > -               if (midQ->midState == MID_REQUEST_SUBMITTED) {
> > -                       if (ses->server->tcpStatus == CifsExiting)
> > -                               rc = -EHOSTDOWN;
> > -                       else {
> > -                               ses->server->tcpStatus = CifsNeedReconnect;
> > -                               midQ->midState = MID_RETRY_NEEDED;
> > -                       }
> > -               }
> > -
> > -               if (rc != -EHOSTDOWN) {
> > -                       if (midQ->midState == MID_RETRY_NEEDED) {
> > -                               rc = -EAGAIN;
> > -                               cFYI(1, "marking request for retry");
> > -                       } else {
> > -                               rc = -EIO;
> > -                       }
> > -               }
> > -               spin_unlock(&GlobalMid_Lock);
> > -               DeleteMidQEntry(midQ);
> > -               /* Update # of requests on wire to server */
> > -               atomic_dec(&ses->server->inFlight);
> > -               wake_up(&ses->server->request_q);
> > +       rc = handle_mid_result(midQ, ses->server);
> > +       if (rc != 0)
> >                return rc;
> > -       }
> >
> > -       spin_unlock(&GlobalMid_Lock);
> >        receive_len = midQ->resp_buf->smb_buf_length;
> >
> >        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
> > @@ -677,36 +690,10 @@ SendReceive(const unsigned int xid, struct cifsSesInfo *ses,
> >        /* No user interrupts in wait - wreaks havoc with performance */
> >        wait_for_response(ses, midQ, timeout, 10 * HZ);
> >
> > -       spin_lock(&GlobalMid_Lock);
> > -       if (midQ->resp_buf == NULL) {
> > -               cERROR(1, "No response for cmd %d mid %d",
> > -                         midQ->command, midQ->mid);
> > -               if (midQ->midState == MID_REQUEST_SUBMITTED) {
> > -                       if (ses->server->tcpStatus == CifsExiting)
> > -                               rc = -EHOSTDOWN;
> > -                       else {
> > -                               ses->server->tcpStatus = CifsNeedReconnect;
> > -                               midQ->midState = MID_RETRY_NEEDED;
> > -                       }
> > -               }
> > -
> > -               if (rc != -EHOSTDOWN) {
> > -                       if (midQ->midState == MID_RETRY_NEEDED) {
> > -                               rc = -EAGAIN;
> > -                               cFYI(1, "marking request for retry");
> > -                       } else {
> > -                               rc = -EIO;
> > -                       }
> > -               }
> > -               spin_unlock(&GlobalMid_Lock);
> > -               DeleteMidQEntry(midQ);
> > -               /* Update # of requests on wire to server */
> > -               atomic_dec(&ses->server->inFlight);
> > -               wake_up(&ses->server->request_q);
> > +       rc = handle_mid_result(midQ, ses->server);
> > +       if (rc != 0)
> >                return rc;
> > -       }
> >
> > -       spin_unlock(&GlobalMid_Lock);
> >        receive_len = midQ->resp_buf->smb_buf_length;
> >
> >        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
> > @@ -926,35 +913,11 @@ SendReceiveBlockingLock(const unsigned int xid, struct cifsTconInfo *tcon,
> >                }
> >        }
> >
> > -       spin_lock(&GlobalMid_Lock);
> > -       if (midQ->resp_buf) {
> > -               spin_unlock(&GlobalMid_Lock);
> > -               receive_len = midQ->resp_buf->smb_buf_length;
> > -       } else {
> > -               cERROR(1, "No response for cmd %d mid %d",
> > -                         midQ->command, midQ->mid);
> > -               if (midQ->midState == MID_REQUEST_SUBMITTED) {
> > -                       if (ses->server->tcpStatus == CifsExiting)
> > -                               rc = -EHOSTDOWN;
> > -                       else {
> > -                               ses->server->tcpStatus = CifsNeedReconnect;
> > -                               midQ->midState = MID_RETRY_NEEDED;
> > -                       }
> > -               }
> > -
> > -               if (rc != -EHOSTDOWN) {
> > -                       if (midQ->midState == MID_RETRY_NEEDED) {
> > -                               rc = -EAGAIN;
> > -                               cFYI(1, "marking request for retry");
> > -                       } else {
> > -                               rc = -EIO;
> > -                       }
> > -               }
> > -               spin_unlock(&GlobalMid_Lock);
> > -               DeleteMidQEntry(midQ);
> > +       rc = handle_mid_result(midQ, ses->server);
> > +       if (rc != 0)
> >                return rc;
> > -       }
> >
> > +       receive_len = midQ->resp_buf->smb_buf_length;
> >        if (receive_len > CIFSMaxBufSize + MAX_CIFS_HDR_SIZE) {
> >                cERROR(1, "Frame too large received.  Length: %d  Xid: %d",
> >                        receive_len, xid);
> > --
> > 1.7.3.2
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
> > the body of a message to majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >


-- 
Jeff Layton <jlayton@xxxxxxxxxx>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux