Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d88a714b authored by Sarang Radke's avatar Sarang Radke Committed by James Bottomley
Browse files

[SCSI] scsi_transport_fc: Make sure commands are completed when rport is offline



blk_end_request doesn't complete a bidi request
successfully

The unfinished request eventually triggers a panic in
timeout handling routine fc_bsg_job_timeout as
req->special is NULL

Use blk_end_request_all to end the request unconditionally

Signed-off-by: default avatarLalit Chandivade <lalit.chandivade@qlogic.com>
Acked-by: default avatarJames Smart <james.smart@emulex.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 4ae0a6c1
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -3852,7 +3852,7 @@ fc_bsg_request_handler(struct request_queue *q, struct Scsi_Host *shost,
		if (rport && (rport->port_state != FC_PORTSTATE_ONLINE)) {
		if (rport && (rport->port_state != FC_PORTSTATE_ONLINE)) {
			req->errors = -ENXIO;
			req->errors = -ENXIO;
			spin_unlock_irq(q->queue_lock);
			spin_unlock_irq(q->queue_lock);
			blk_end_request(req, -ENXIO, blk_rq_bytes(req));
			blk_end_request_all(req, -ENXIO);
			spin_lock_irq(q->queue_lock);
			spin_lock_irq(q->queue_lock);
			continue;
			continue;
		}
		}
@@ -3862,7 +3862,7 @@ fc_bsg_request_handler(struct request_queue *q, struct Scsi_Host *shost,
		ret = fc_req_to_bsgjob(shost, rport, req);
		ret = fc_req_to_bsgjob(shost, rport, req);
		if (ret) {
		if (ret) {
			req->errors = ret;
			req->errors = ret;
			blk_end_request(req, ret, blk_rq_bytes(req));
			blk_end_request_all(req, ret);
			spin_lock_irq(q->queue_lock);
			spin_lock_irq(q->queue_lock);
			continue;
			continue;
		}
		}