diff options
Diffstat (limited to 'drivers/target/loopback/tcm_loop.c')
| -rw-r--r-- | drivers/target/loopback/tcm_loop.c | 41 | 
1 files changed, 10 insertions, 31 deletions
diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c index 3df1c9b8ae6..81d5832fbbd 100644 --- a/drivers/target/loopback/tcm_loop.c +++ b/drivers/target/loopback/tcm_loop.c @@ -113,11 +113,9 @@ static struct se_cmd *tcm_loop_allocate_core_cmd(  			scsi_bufflen(sc), sc->sc_data_direction, sam_task_attr,  			&tl_cmd->tl_sense_buf[0]); -	/* -	 * Signal BIDI usage with T_TASK(cmd)->t_tasks_bidi -	 */  	if (scsi_bidi_cmnd(sc)) -		se_cmd->t_tasks_bidi = 1; +		se_cmd->se_cmd_flags |= SCF_BIDI; +  	/*  	 * Locate the struct se_lun pointer and attach it to struct se_cmd  	 */ @@ -148,27 +146,13 @@ static int tcm_loop_new_cmd_map(struct se_cmd *se_cmd)  	 * Allocate the necessary tasks to complete the received CDB+data  	 */  	ret = transport_generic_allocate_tasks(se_cmd, sc->cmnd); -	if (ret == -ENOMEM) { -		/* Out of Resources */ -		return PYX_TRANSPORT_LU_COMM_FAILURE; -	} else if (ret == -EINVAL) { -		/* -		 * Handle case for SAM_STAT_RESERVATION_CONFLICT -		 */ -		if (se_cmd->se_cmd_flags & SCF_SCSI_RESERVATION_CONFLICT) -			return PYX_TRANSPORT_RESERVATION_CONFLICT; -		/* -		 * Otherwise, return SAM_STAT_CHECK_CONDITION and return -		 * sense data. -		 */ -		return PYX_TRANSPORT_USE_SENSE_REASON; -	} - +	if (ret != 0) +		return ret;  	/*  	 * For BIDI commands, pass in the extra READ buffer  	 * to transport_generic_map_mem_to_cmd() below..  	 */ -	if (se_cmd->t_tasks_bidi) { +	if (se_cmd->se_cmd_flags & SCF_BIDI) {  		struct scsi_data_buffer *sdb = scsi_in(sc);  		sgl_bidi = sdb->table.sgl; @@ -194,12 +178,8 @@ static int tcm_loop_new_cmd_map(struct se_cmd *se_cmd)  	}  	/* Tell the core about our preallocated memory */ -	ret = transport_generic_map_mem_to_cmd(se_cmd, scsi_sglist(sc), +	return transport_generic_map_mem_to_cmd(se_cmd, scsi_sglist(sc),  			scsi_sg_count(sc), sgl_bidi, sgl_bidi_count); -	if (ret < 0) -		return PYX_TRANSPORT_LU_COMM_FAILURE; - -	return 0;  }  /* @@ -1360,17 +1340,16 @@ void tcm_loop_drop_scsi_hba(  {  	struct tcm_loop_hba *tl_hba = container_of(wwn,  				struct tcm_loop_hba, tl_hba_wwn); -	int host_no = tl_hba->sh->host_no; + +	pr_debug("TCM_Loop_ConfigFS: Deallocating emulated Target" +		" SAS Address: %s at Linux/SCSI Host ID: %d\n", +		tl_hba->tl_wwn_address, tl_hba->sh->host_no);  	/*  	 * Call device_unregister() on the original tl_hba->dev.  	 * tcm_loop_fabric_scsi.c:tcm_loop_release_adapter() will  	 * release *tl_hba;  	 */  	device_unregister(&tl_hba->dev); - -	pr_debug("TCM_Loop_ConfigFS: Deallocated emulated Target" -		" SAS Address: %s at Linux/SCSI Host ID: %d\n", -		config_item_name(&wwn->wwn_group.cg_item), host_no);  }  /* Start items for tcm_loop_cit */  |