| From: Bart Van Assche <bart.vanassche@wdc.com> |
| Date: Fri, 23 Feb 2018 14:09:24 -0800 |
| Subject: IB/srp: Fix srp_abort() |
| |
| commit e68088e78d82920632eba112b968e49d588d02a2 upstream. |
| |
| Before commit e494f6a72839 ("[SCSI] improved eh timeout handler") it |
| did not really matter whether or not abort handlers like srp_abort() |
| called .scsi_done() when returning another value than SUCCESS. Since |
| that commit however this matters. Hence only call .scsi_done() when |
| returning SUCCESS. |
| |
| Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com> |
| Signed-off-by: Jason Gunthorpe <jgg@mellanox.com> |
| [bwh: Backported to 3.16: s/ch/target/] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/infiniband/ulp/srp/ib_srp.c | 8 +++++--- |
| 1 file changed, 5 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/infiniband/ulp/srp/ib_srp.c |
| +++ b/drivers/infiniband/ulp/srp/ib_srp.c |
| @@ -2393,9 +2393,11 @@ static int srp_abort(struct scsi_cmnd *s |
| ret = FAST_IO_FAIL; |
| else |
| ret = FAILED; |
| - srp_free_req(target, req, scmnd, 0); |
| - scmnd->result = DID_ABORT << 16; |
| - scmnd->scsi_done(scmnd); |
| + if (ret == SUCCESS) { |
| + srp_free_req(target, req, scmnd, 0); |
| + scmnd->result = DID_ABORT << 16; |
| + scmnd->scsi_done(scmnd); |
| + } |
| |
| return ret; |
| } |