提交 ad469a57 编写于 作者: H Hannes Reinecke 提交者: James Bottomley

[SCSI] scsi_error: disable eh_deadline if no host_reset_handler is set

When the host template doesn't declare an eh_host_reset_handler
the eh_deadline mechanism is pointless and will set the
device to offline. So disable eh_deadline if no
eh_host_reset_handler is present.
Signed-off-by: NHannes Reinecke <hare@suse.de>
Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
上级 f2495e22
...@@ -398,7 +398,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize) ...@@ -398,7 +398,7 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
shost->ordered_tag = sht->ordered_tag; shost->ordered_tag = sht->ordered_tag;
shost->no_write_same = sht->no_write_same; shost->no_write_same = sht->no_write_same;
if (shost_eh_deadline == -1) if (shost_eh_deadline == -1 || !sht->eh_host_reset_handler)
shost->eh_deadline = -1; shost->eh_deadline = -1;
else if ((ulong) shost_eh_deadline * HZ > INT_MAX) { else if ((ulong) shost_eh_deadline * HZ > INT_MAX) {
shost_printk(KERN_WARNING, shost, shost_printk(KERN_WARNING, shost,
......
...@@ -300,7 +300,9 @@ store_shost_eh_deadline(struct device *dev, struct device_attribute *attr, ...@@ -300,7 +300,9 @@ store_shost_eh_deadline(struct device *dev, struct device_attribute *attr,
int ret = -EINVAL; int ret = -EINVAL;
unsigned long deadline, flags; unsigned long deadline, flags;
if (shost->transportt && shost->transportt->eh_strategy_handler) if (shost->transportt &&
(shost->transportt->eh_strategy_handler ||
!shost->hostt->eh_host_reset_handler))
return ret; return ret;
if (!strncmp(buf, "off", strlen("off"))) if (!strncmp(buf, "off", strlen("off")))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册