Re: [PATCH] cifs: cancel all remaining requests if one failed in a compound

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

 






----- Original Message -----
> From: "Steve French" <smfrench@xxxxxxxxx>
> To: "Ronnie Sahlberg" <lsahlber@xxxxxxxxxx>
> Cc: "Linux CIFS mailing list" <linux-cifs@xxxxxxxxxxxxxxx>
> Sent: Friday, 21 December, 2018 1:19:01 PM
> Subject: Re: [PATCH] cifs: cancel all remaining requests if one failed in a compound
> 
> shouldn't this be cc:stable

Probably.
I would like Pavel to bless it first.


> 
> On Thu, Dec 20, 2018 at 9:18 PM Ronnie Sahlberg <lsahlber@xxxxxxxxxx> wrote:
> >
> > If we failed to get a reply to a request in a compound we should cancel
> > the current request and also all further requests in the chain.
> >
> > Reported-by: Pavel Shilovsky <piastryyy@xxxxxxxxx>
> > Signed-off-by: Ronnie Sahlberg <lsahlber@xxxxxxxxxx>
> > ---
> >  fs/cifs/transport.c | 11 +++++------
> >  1 file changed, 5 insertions(+), 6 deletions(-)
> >
> > diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
> > index 83ff0c25710d..ed6cd5066396 100644
> > --- a/fs/cifs/transport.c
> > +++ b/fs/cifs/transport.c
> > @@ -873,7 +873,11 @@ compound_send_recv(const unsigned int xid, struct
> > cifs_ses *ses,
> >
> >         for (i = 0; i < num_rqst; i++) {
> >                 rc = wait_for_response(ses->server, midQ[i]);
> > -               if (rc != 0) {
> > +               if (rc != 0)
> > +                       break;
> > +       }
> > +       if (rc != 0) {
> > +               for (; i < num_rqst; i++) {
> >                         cifs_dbg(VFS, "Cancelling wait for mid %llu cmd:
> >                         %d\n",
> >                                  midQ[i]->mid,
> >                                  le16_to_cpu(midQ[i]->command));
> >                         send_cancel(ses->server, &rqst[i], midQ[i]);
> > @@ -881,9 +885,6 @@ compound_send_recv(const unsigned int xid, struct
> > cifs_ses *ses,
> >                         if (midQ[i]->mid_state == MID_REQUEST_SUBMITTED) {
> >                                 midQ[i]->mid_flags |= MID_WAIT_CANCELLED;
> >                                 midQ[i]->callback = DeleteMidQEntry;
> > -                               spin_unlock(&GlobalMid_Lock);
> > -                               add_credits(ses->server, 1, optype);
> > -                               return rc;
> >                         }
> >                         spin_unlock(&GlobalMid_Lock);
> >                 }
> > @@ -892,8 +893,6 @@ compound_send_recv(const unsigned int xid, struct
> > cifs_ses *ses,
> >         for (i = 0; i < num_rqst; i++)
> >                 if (midQ[i]->resp_buf)
> >                         credits += ses->server->ops->get_credits(midQ[i]);
> > -       if (!credits)
> > -               credits = 1;
> >
> >         for (i = 0; i < num_rqst; i++) {
> >                 if (rc < 0)
> > --
> > 2.13.6
> >
> 
> 
> --
> Thanks,
> 
> Steve
> 



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

  Powered by Linux