diff options
Diffstat (limited to 'drivers/scsi/scsi_lib.c')
| -rw-r--r-- | drivers/scsi/scsi_lib.c | 4 | 
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c index a86df9ca7d1c..c84f931388f2 100644 --- a/drivers/scsi/scsi_lib.c +++ b/drivers/scsi/scsi_lib.c @@ -671,6 +671,7 @@ static bool scsi_end_request(struct request *req, blk_status_t error,  	if (!blk_rq_is_scsi(req)) {  		WARN_ON_ONCE(!(cmd->flags & SCMD_INITIALIZED));  		cmd->flags &= ~SCMD_INITIALIZED; +		destroy_rcu_head(&cmd->rcu);  	}  	if (req->mq_ctx) { @@ -720,6 +721,8 @@ static blk_status_t __scsi_error_from_host_byte(struct scsi_cmnd *cmd,  		int result)  {  	switch (host_byte(result)) { +	case DID_OK: +		return BLK_STS_OK;  	case DID_TRANSPORT_FAILFAST:  		return BLK_STS_TRANSPORT;  	case DID_TARGET_FAILURE: @@ -1151,6 +1154,7 @@ static void scsi_initialize_rq(struct request *rq)  	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);  	scsi_req_init(&cmd->req); +	init_rcu_head(&cmd->rcu);  	cmd->jiffies_at_alloc = jiffies;  	cmd->retries = 0;  }  |