shouldn't this be cc:stable 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