diff options
| author | Ingo Molnar <mingo@kernel.org> | 2014-02-02 09:45:39 +0100 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2014-02-02 09:45:39 +0100 |
| commit | eaa4e4fcf1b5c60e656d93242f7fe422173f25b2 (patch) | |
| tree | c05d5d6ca3f625d72a9d136b4c485d3dc9472089 /drivers/scsi/scsi_sysfs.c | |
| parent | be1e4e760d940c14d119bffef5eb007dfdf29046 (diff) | |
| parent | 5cb480f6b488128140c940abff3c36f524a334a8 (diff) | |
Merge branch 'linus' into sched/core, to resolve conflicts
Conflicts:
kernel/sysctl.c
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/scsi/scsi_sysfs.c')
| -rw-r--r-- | drivers/scsi/scsi_sysfs.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 8ff62c26a41c..9117d0bf408e 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c @@ -287,7 +287,9 @@ show_shost_eh_deadline(struct device *dev, { struct Scsi_Host *shost = class_to_shost(dev); - return sprintf(buf, "%d\n", shost->eh_deadline / HZ); + if (shost->eh_deadline == -1) + return snprintf(buf, strlen("off") + 2, "off\n"); + return sprintf(buf, "%u\n", shost->eh_deadline / HZ); } static ssize_t @@ -296,22 +298,34 @@ store_shost_eh_deadline(struct device *dev, struct device_attribute *attr, { struct Scsi_Host *shost = class_to_shost(dev); int ret = -EINVAL; - int deadline; - unsigned long flags; + unsigned long deadline, flags; if (shost->transportt && shost->transportt->eh_strategy_handler) return ret; - if (sscanf(buf, "%d\n", &deadline) == 1) { - spin_lock_irqsave(shost->host_lock, flags); - if (scsi_host_in_recovery(shost)) - ret = -EBUSY; - else { + if (!strncmp(buf, "off", strlen("off"))) + deadline = -1; + else { + ret = kstrtoul(buf, 10, &deadline); + if (ret) + return ret; + if (deadline * HZ > UINT_MAX) + return -EINVAL; + } + + spin_lock_irqsave(shost->host_lock, flags); + if (scsi_host_in_recovery(shost)) + ret = -EBUSY; + else { + if (deadline == -1) + shost->eh_deadline = -1; + else shost->eh_deadline = deadline * HZ; - ret = count; - } - spin_unlock_irqrestore(shost->host_lock, flags); + + ret = count; } + spin_unlock_irqrestore(shost->host_lock, flags); + return ret; } |
