----- 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 >