mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Now that each scsi_request is backed by a scsi_cmnd, there is no need to indirect the CDB storage. Change all submitters of SCSI passthrough requests to store the CDB information directly in the scsi_cmnd, and while doing so allocate the full 32 bytes that cover all Linux supported SCSI hosts instead of requiring dynamic allocation for > 16 byte CDBs. On 64-bit systems this does not change the size of the scsi_cmnd at all, while on 32-bit systems it slightly increases it for now, but that increase will be made up by the removal of the remaining scsi_request fields. Link: https://lore.kernel.org/r/20220224175552.988286-4-hch@lst.de Reviewed-by: Bart Van Assche <bvanassche@acm.org> Reviewed-by: John Garry <john.garry@huawei.com> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
		
			
				
	
	
		
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef _SCSI_SCSI_EH_H
 | 
						|
#define _SCSI_SCSI_EH_H
 | 
						|
 | 
						|
#include <linux/scatterlist.h>
 | 
						|
 | 
						|
#include <scsi/scsi_cmnd.h>
 | 
						|
#include <scsi/scsi_common.h>
 | 
						|
struct scsi_device;
 | 
						|
struct Scsi_Host;
 | 
						|
 | 
						|
extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd,
 | 
						|
			       struct list_head *done_q);
 | 
						|
extern void scsi_eh_flush_done_q(struct list_head *done_q);
 | 
						|
extern void scsi_report_bus_reset(struct Scsi_Host *, int);
 | 
						|
extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
 | 
						|
extern int scsi_block_when_processing_errors(struct scsi_device *);
 | 
						|
extern bool scsi_command_normalize_sense(const struct scsi_cmnd *cmd,
 | 
						|
					 struct scsi_sense_hdr *sshdr);
 | 
						|
extern enum scsi_disposition scsi_check_sense(struct scsi_cmnd *);
 | 
						|
 | 
						|
static inline bool scsi_sense_is_deferred(const struct scsi_sense_hdr *sshdr)
 | 
						|
{
 | 
						|
	return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1));
 | 
						|
}
 | 
						|
 | 
						|
extern bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len,
 | 
						|
				    u64 *info_out);
 | 
						|
 | 
						|
extern int scsi_ioctl_reset(struct scsi_device *, int __user *);
 | 
						|
 | 
						|
struct scsi_eh_save {
 | 
						|
	/* saved state */
 | 
						|
	int result;
 | 
						|
	unsigned int resid_len;
 | 
						|
	int eh_eflags;
 | 
						|
	enum dma_data_direction data_direction;
 | 
						|
	unsigned underflow;
 | 
						|
	unsigned char cmd_len;
 | 
						|
	unsigned char prot_op;
 | 
						|
	unsigned char cmnd[32];
 | 
						|
	struct scsi_data_buffer sdb;
 | 
						|
	struct scatterlist sense_sgl;
 | 
						|
};
 | 
						|
 | 
						|
extern void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd,
 | 
						|
		struct scsi_eh_save *ses, unsigned char *cmnd,
 | 
						|
		int cmnd_size, unsigned sense_bytes);
 | 
						|
 | 
						|
extern void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd,
 | 
						|
		struct scsi_eh_save *ses);
 | 
						|
 | 
						|
#endif /* _SCSI_SCSI_EH_H */
 |