Re: [PATCH 12/16] cifs: eliminate is_multi_rsp parm to find_cifs_mid

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

 



On Wed, 12 Oct 2011 12:43:04 +0400
Pavel Shilovsky <piastryyy@xxxxxxxxx> wrote:

> 2011/8/29 Jeff Layton <jlayton@xxxxxxxxxx>:
> > Change find_cifs_mid to only return NULL if a mid could not be found.
> > If we got part of a multi-part T2 response, then coalesce it and still
> > return the mid. The caller can determine the T2 receive status from
> > the flags in the mid.
> >
> > With this change, there is no need to pass a pointer to "length" as
> > well so just pass by value. If a mid is found, then we can just mark
> > it as malformed. If one isn't found, then the value of "length" won't
> > change anyway.
> >
> > Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
> > ---
> >  fs/cifs/connect.c |   35 ++++++++++++++++-------------------
> >  1 files changed, 16 insertions(+), 19 deletions(-)
> >
> > diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
> > index 6b4fcb3..9518457 100644
> > --- a/fs/cifs/connect.c
> > +++ b/fs/cifs/connect.c
> > @@ -576,8 +576,7 @@ dequeue_mid(struct mid_q_entry *mid, int malformed)
> >
> >  static struct mid_q_entry *
> >  find_cifs_mid(struct TCP_Server_Info *server, struct smb_hdr *buf,
> > -             int *malformed, bool is_large_buf, bool *is_multi_rsp,
> > -             char **bigbuf)
> > +             int malformed, bool is_large_buf, char **bigbuf)
> >  {
> >        struct mid_q_entry *mid = NULL;
> >
> > @@ -585,16 +584,14 @@ find_cifs_mid(struct TCP_Server_Info *server, struct smb_hdr *buf,
> >        if (!mid)
> >                return mid;
> >
> > -       if (*malformed == 0 && check2ndT2(buf) > 0) {
> > -               /* We have a multipart transact2 resp */
> > -               *is_multi_rsp = true;
> > +       if (malformed == 0 && check2ndT2(buf) > 0) {
> > +               mid->multiRsp = true;
> >                if (mid->resp_buf) {
> >                        /* merge response - fix up 1st*/
> > -                       *malformed = coalesce_t2(buf, mid->resp_buf);
> > -                       if (*malformed > 0) {
> > -                               *malformed = 0;
> > -                               mid->multiRsp = true;
> > -                               return NULL;
> > +                       malformed = coalesce_t2(buf, mid->resp_buf);
> > +                       if (malformed > 0) {
> > +                               malformed = 0;
>                                     ^^^^
> this is unnecessary because we return from the function as the next step.
> 

<forehead slap>

Correct. It's a harmless thing though. Mind if I fix this in a
follow-on patch to the whole series? I hate to have to respin it for
this...


> 
> > +                               return mid;
> >                        }
> >                        /* All parts received or packet is malformed. */
> >                        mid->multiEnd = true;
> > @@ -614,7 +611,7 @@ find_cifs_mid(struct TCP_Server_Info *server, struct smb_hdr *buf,
> >        mid->resp_buf = buf;
> >        mid->largeBuf = is_large_buf;
> >  multi_t2_fnd:
> > -       dequeue_mid(mid, *malformed);
> > +       dequeue_mid(mid, malformed);
> >        return mid;
> >  }
> >
> > @@ -725,7 +722,6 @@ cifs_demultiplex_thread(void *p)
> >        struct task_struct *task_to_wake = NULL;
> >        struct mid_q_entry *mid_entry;
> >        bool isLargeBuf = false;
> > -       bool isMultiRsp = false;
> >
> >        current->flags |= PF_MEMALLOC;
> >        cFYI(1, "Demultiplex PID: %d", task_pid_nr(current));
> > @@ -745,7 +741,6 @@ cifs_demultiplex_thread(void *p)
> >                        continue;
> >
> >                isLargeBuf = false;
> > -               isMultiRsp = false;
> >                smb_buffer = (struct smb_hdr *)smallbuf;
> >                buf = smallbuf;
> >                pdu_length = 4; /* enough to get RFC1001 header */
> > @@ -823,23 +818,25 @@ cifs_demultiplex_thread(void *p)
> >
> >                server->lstrp = jiffies;
> >
> > -               mid_entry = find_cifs_mid(server, smb_buffer, &length,
> > -                                         isLargeBuf, &isMultiRsp, &bigbuf);
> > +               mid_entry = find_cifs_mid(server, smb_buffer, length,
> > +                                         isLargeBuf, &bigbuf);
> >                if (mid_entry != NULL) {
> > -                       mid_entry->callback(mid_entry);
> > +                       if (mid_entry->multiRsp && !mid_entry->multiEnd)
> > +                               continue;
> > +
> >                        /* Was previous buf put in mpx struct for multi-rsp? */
> > -                       if (!isMultiRsp) {
> > +                       if (!mid_entry->multiRsp) {
> >                                /* smb buffer will be freed by user thread */
> >                                if (isLargeBuf)
> >                                        bigbuf = NULL;
> >                                else
> >                                        smallbuf = NULL;
> >                        }
> > +                       mid_entry->callback(mid_entry);
> >                } else if (length != 0) {
> >                        /* response sanity checks failed */
> >                        continue;
> > -               } else if (!is_valid_oplock_break(smb_buffer, server) &&
> > -                          !isMultiRsp) {
> > +               } else if (!is_valid_oplock_break(smb_buffer, server)) {
> >                        cERROR(1, "No task to wake, unknown frame received! "
> >                                   "NumMids %d", atomic_read(&midCount));
> >                        cifs_dump_mem("Received Data is: ", buf,
> > --
> > 1.7.6
> >
> > --
> > 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