[SCSI] ibmvscsi: Don't fail EH due to insufficient resources
The ibmvscsi driver currently has a bug in it which can result in it using up all its event structs for commands. If something results in all those commands timing out, we won't have any resources left to send aborts or resets. This results in escalating to a host reset in order to recover, which is a bit heavy handed. This fixes it by reducing can_queue by two in order to have resources to do EH. It also changes the max_requests module parameter so that it is not writable at runtime, since the code really does not handle it changing at runtime. Signed-off-by: Brian King <brking@linux.vnet.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
4d3fef9e69
commit
21465eda9e
|
@ -107,7 +107,7 @@ module_param_named(max_channel, max_channel, int, S_IRUGO | S_IWUSR);
|
|||
MODULE_PARM_DESC(max_channel, "Largest channel value");
|
||||
module_param_named(init_timeout, init_timeout, int, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(init_timeout, "Initialization timeout in seconds");
|
||||
module_param_named(max_requests, max_requests, int, S_IRUGO | S_IWUSR);
|
||||
module_param_named(max_requests, max_requests, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(max_requests, "Maximum requests for this adapter");
|
||||
|
||||
/* ------------------------------------------------------------
|
||||
|
@ -1657,7 +1657,7 @@ static int ibmvscsi_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
|||
|
||||
vdev->dev.driver_data = NULL;
|
||||
|
||||
driver_template.can_queue = max_requests;
|
||||
driver_template.can_queue = max_requests - 2;
|
||||
host = scsi_host_alloc(&driver_template, sizeof(*hostdata));
|
||||
if (!host) {
|
||||
dev_err(&vdev->dev, "couldn't allocate host data\n");
|
||||
|
|
Loading…
Reference in New Issue