scsi: storvsc: Increase the timeouts to storvsc_timeout
commit b2f966568faaad326de97481096d0f3dc0971c43 upstream. Currently storvsc_timeout is only used in storvsc_sdev_configure(), and 5s and 10s are used elsewhere. It turns out that rarely the 5s is not enough on Azure, so let's use storvsc_timeout everywhere. In case a timeout happens and storvsc_channel_init() returns an error, close the VMBus channel so that any host-to-guest messages in the channel's ringbuffer, which might come late, can be safely ignored. Add a "const" to storvsc_timeout. Cc: stable@kernel.org Signed-off-by: Dexuan Cui <decui@microsoft.com> Link: https://lore.kernel.org/r/1749243459-10419-1-git-send-email-decui@microsoft.com Reviewed-by: Long Li <longli@microsoft.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a504536c29
commit
8d60df50e6
@@ -362,7 +362,7 @@ MODULE_PARM_DESC(ring_avail_percent_lowater,
|
|||||||
/*
|
/*
|
||||||
* Timeout in seconds for all devices managed by this driver.
|
* Timeout in seconds for all devices managed by this driver.
|
||||||
*/
|
*/
|
||||||
static int storvsc_timeout = 180;
|
static const int storvsc_timeout = 180;
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
|
#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
|
||||||
static struct scsi_transport_template *fc_transport_template;
|
static struct scsi_transport_template *fc_transport_template;
|
||||||
@@ -768,7 +768,7 @@ static void handle_multichannel_storage(struct hv_device *device, int max_chns)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
t = wait_for_completion_timeout(&request->wait_event, 10*HZ);
|
t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
|
||||||
if (t == 0) {
|
if (t == 0) {
|
||||||
dev_err(dev, "Failed to create sub-channel: timed out\n");
|
dev_err(dev, "Failed to create sub-channel: timed out\n");
|
||||||
return;
|
return;
|
||||||
@@ -833,7 +833,7 @@ static int storvsc_execute_vstor_op(struct hv_device *device,
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
|
t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
|
||||||
if (t == 0)
|
if (t == 0)
|
||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
|
|
||||||
@@ -1351,6 +1351,8 @@ static int storvsc_connect_to_vsp(struct hv_device *device, u32 ring_size,
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = storvsc_channel_init(device, is_fc);
|
ret = storvsc_channel_init(device, is_fc);
|
||||||
|
if (ret)
|
||||||
|
vmbus_close(device->channel);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -1668,7 +1670,7 @@ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return FAILED;
|
return FAILED;
|
||||||
|
|
||||||
t = wait_for_completion_timeout(&request->wait_event, 5*HZ);
|
t = wait_for_completion_timeout(&request->wait_event, storvsc_timeout * HZ);
|
||||||
if (t == 0)
|
if (t == 0)
|
||||||
return TIMEOUT_ERROR;
|
return TIMEOUT_ERROR;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user