mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
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