 02b1a74634
			
		
	
	
	02b1a74634
	
	
	
		
			
			Move the entirely request allocation, mapping and submission into ->do_task. This a) avoids blocking the I/O submission thread unessecarily, and b) simplifies the code greatly Note that the code seems to have various error handling issues, mostly related to bidi handling in the current form. I've added comments about those but not tried to fix them in this commit. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
		
			
				
	
	
		
			62 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef TARGET_CORE_PSCSI_H
 | |
| #define TARGET_CORE_PSCSI_H
 | |
| 
 | |
| #define PSCSI_VERSION		"v4.0"
 | |
| 
 | |
| /* used in pscsi_find_alloc_len() */
 | |
| #ifndef INQUIRY_DATA_SIZE
 | |
| #define INQUIRY_DATA_SIZE	0x24
 | |
| #endif
 | |
| 
 | |
| /* used in pscsi_add_device_to_list() */
 | |
| #define PSCSI_DEFAULT_QUEUEDEPTH	1
 | |
| 
 | |
| #define PS_RETRY		5
 | |
| #define PS_TIMEOUT_DISK		(15*HZ)
 | |
| #define PS_TIMEOUT_OTHER	(500*HZ)
 | |
| 
 | |
| #include <linux/device.h>
 | |
| #include <scsi/scsi_driver.h>
 | |
| #include <scsi/scsi_device.h>
 | |
| #include <linux/kref.h>
 | |
| #include <linux/kobject.h>
 | |
| 
 | |
| struct pscsi_plugin_task {
 | |
| 	struct se_task pscsi_task;
 | |
| 	unsigned char pscsi_sense[SCSI_SENSE_BUFFERSIZE];
 | |
| 	int	pscsi_direction;
 | |
| 	int	pscsi_result;
 | |
| 	u32	pscsi_resid;
 | |
| 	unsigned char pscsi_cdb[0];
 | |
| } ____cacheline_aligned;
 | |
| 
 | |
| #define PDF_HAS_CHANNEL_ID	0x01
 | |
| #define PDF_HAS_TARGET_ID	0x02
 | |
| #define PDF_HAS_LUN_ID		0x04
 | |
| #define PDF_HAS_VPD_UNIT_SERIAL 0x08
 | |
| #define PDF_HAS_VPD_DEV_IDENT	0x10
 | |
| #define PDF_HAS_VIRT_HOST_ID	0x20
 | |
| 
 | |
| struct pscsi_dev_virt {
 | |
| 	int	pdv_flags;
 | |
| 	int	pdv_host_id;
 | |
| 	int	pdv_channel_id;
 | |
| 	int	pdv_target_id;
 | |
| 	int	pdv_lun_id;
 | |
| 	struct block_device *pdv_bd;
 | |
| 	struct scsi_device *pdv_sd;
 | |
| 	struct se_hba *pdv_se_hba;
 | |
| } ____cacheline_aligned;
 | |
| 
 | |
| typedef enum phv_modes {
 | |
| 	PHV_VIRUTAL_HOST_ID,
 | |
| 	PHV_LLD_SCSI_HOST_NO
 | |
| } phv_modes_t;
 | |
| 
 | |
| struct pscsi_hba_virt {
 | |
| 	int			phv_host_id;
 | |
| 	phv_modes_t		phv_mode;
 | |
| 	struct Scsi_Host	*phv_lld_host;
 | |
| } ____cacheline_aligned;
 | |
| 
 | |
| #endif   /*** TARGET_CORE_PSCSI_H ***/
 |