scsi: make the sense header argument to scsi_test_unit_ready mandatory
It's a tiny structure that can be allocated on the stack, don't complicate the code by making it optional. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
		
							parent
							
								
									6fa2b8f9e3
								
							
						
					
					
						commit
						74a78ebda4
					
				| @ -372,6 +372,7 @@ EXPORT_SYMBOL(osduld_device_same); | ||||
| static int __detect_osd(struct osd_uld_device *oud) | ||||
| { | ||||
| 	struct scsi_device *scsi_device = oud->od.scsi_device; | ||||
| 	struct scsi_sense_hdr sense_hdr; | ||||
| 	char caps[OSD_CAP_LEN]; | ||||
| 	int error; | ||||
| 
 | ||||
| @ -380,7 +381,7 @@ static int __detect_osd(struct osd_uld_device *oud) | ||||
| 	 */ | ||||
| 	OSD_DEBUG("start scsi_test_unit_ready %p %p %p\n", | ||||
| 			oud, scsi_device, scsi_device->request_queue); | ||||
| 	error = scsi_test_unit_ready(scsi_device, 10*HZ, 5, NULL); | ||||
| 	error = scsi_test_unit_ready(scsi_device, 10*HZ, 5, &sense_hdr); | ||||
| 	if (error) | ||||
| 		OSD_ERR("warning: scsi_test_unit_ready failed\n"); | ||||
| 
 | ||||
|  | ||||
| @ -199,6 +199,7 @@ static int scsi_ioctl_get_pci(struct scsi_device *sdev, void __user *arg) | ||||
| int scsi_ioctl(struct scsi_device *sdev, int cmd, void __user *arg) | ||||
| { | ||||
| 	char scsi_cmd[MAX_COMMAND_SIZE]; | ||||
| 	struct scsi_sense_hdr sense_hdr; | ||||
| 
 | ||||
| 	/* Check for deprecated ioctls ... all the ioctls which don't
 | ||||
| 	 * follow the new unique numbering scheme are deprecated */ | ||||
| @ -243,7 +244,7 @@ int scsi_ioctl(struct scsi_device *sdev, int cmd, void __user *arg) | ||||
| 		return scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW); | ||||
| 	case SCSI_IOCTL_TEST_UNIT_READY: | ||||
| 		return scsi_test_unit_ready(sdev, IOCTL_NORMAL_TIMEOUT, | ||||
| 					    NORMAL_RETRIES, NULL); | ||||
| 					    NORMAL_RETRIES, &sense_hdr); | ||||
| 	case SCSI_IOCTL_START_UNIT: | ||||
| 		scsi_cmd[0] = START_STOP; | ||||
| 		scsi_cmd[1] = 0; | ||||
|  | ||||
| @ -2520,28 +2520,20 @@ EXPORT_SYMBOL(scsi_mode_sense); | ||||
|  *	@sdev:	scsi device to change the state of. | ||||
|  *	@timeout: command timeout | ||||
|  *	@retries: number of retries before failing | ||||
|  *	@sshdr_external: Optional pointer to struct scsi_sense_hdr for | ||||
|  *		returning sense. Make sure that this is cleared before passing | ||||
|  *		in. | ||||
|  *	@sshdr: outpout pointer for decoded sense information. | ||||
|  * | ||||
|  *	Returns zero if unsuccessful or an error if TUR failed.  For | ||||
|  *	removable media, UNIT_ATTENTION sets ->changed flag. | ||||
|  **/ | ||||
| int | ||||
| scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries, | ||||
| 		     struct scsi_sense_hdr *sshdr_external) | ||||
| 		     struct scsi_sense_hdr *sshdr) | ||||
| { | ||||
| 	char cmd[] = { | ||||
| 		TEST_UNIT_READY, 0, 0, 0, 0, 0, | ||||
| 	}; | ||||
| 	struct scsi_sense_hdr *sshdr; | ||||
| 	int result; | ||||
| 
 | ||||
| 	if (!sshdr_external) | ||||
| 		sshdr = kzalloc(sizeof(*sshdr), GFP_KERNEL); | ||||
| 	else | ||||
| 		sshdr = sshdr_external; | ||||
| 
 | ||||
| 	/* try to eat the UNIT_ATTENTION if there are enough retries */ | ||||
| 	do { | ||||
| 		result = scsi_execute_req(sdev, cmd, DMA_NONE, NULL, 0, sshdr, | ||||
| @ -2552,8 +2544,6 @@ scsi_test_unit_ready(struct scsi_device *sdev, int timeout, int retries, | ||||
| 	} while (scsi_sense_valid(sshdr) && | ||||
| 		 sshdr->sense_key == UNIT_ATTENTION && --retries); | ||||
| 
 | ||||
| 	if (!sshdr_external) | ||||
| 		kfree(sshdr); | ||||
| 	return result; | ||||
| } | ||||
| EXPORT_SYMBOL(scsi_test_unit_ready); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user