diff options
author | Stefan Haberland <stefan.haberland@de.ibm.com> | 2010-08-09 12:13:00 -0400 |
---|---|---|
committer | Martin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com> | 2010-08-09 12:12:54 -0400 |
commit | 7c8faa86290c1a2607d6b768a0b874ec392a5c2a (patch) | |
tree | 7cb94efdbd3ce3c5eb8fb7a2b7d8a5bedebcb1a2 /drivers/s390/block/dasd_devmap.c | |
parent | f932bcea6b7317312ab38df12a84710fc6c67a81 (diff) |
[S390] dasd: tunable missing interrupt handler
This feature provides a user interface to specify the timeout for
missing interrupts for standard I/O operations.
Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/block/dasd_devmap.c')
-rw-r--r-- | drivers/s390/block/dasd_devmap.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd_devmap.c b/drivers/s390/block/dasd_devmap.c index bed7b4634ccd..8d41f3ed38d7 100644 --- a/drivers/s390/block/dasd_devmap.c +++ b/drivers/s390/block/dasd_devmap.c | |||
@@ -1083,6 +1083,49 @@ dasd_eer_store(struct device *dev, struct device_attribute *attr, | |||
1083 | 1083 | ||
1084 | static DEVICE_ATTR(eer_enabled, 0644, dasd_eer_show, dasd_eer_store); | 1084 | static DEVICE_ATTR(eer_enabled, 0644, dasd_eer_show, dasd_eer_store); |
1085 | 1085 | ||
1086 | /* | ||
1087 | * expiration time for default requests | ||
1088 | */ | ||
1089 | static ssize_t | ||
1090 | dasd_expires_show(struct device *dev, struct device_attribute *attr, char *buf) | ||
1091 | { | ||
1092 | struct dasd_device *device; | ||
1093 | int len; | ||
1094 | |||
1095 | device = dasd_device_from_cdev(to_ccwdev(dev)); | ||
1096 | if (IS_ERR(device)) | ||
1097 | return -ENODEV; | ||
1098 | len = snprintf(buf, PAGE_SIZE, "%lu\n", device->default_expires); | ||
1099 | dasd_put_device(device); | ||
1100 | return len; | ||
1101 | } | ||
1102 | |||
1103 | static ssize_t | ||
1104 | dasd_expires_store(struct device *dev, struct device_attribute *attr, | ||
1105 | const char *buf, size_t count) | ||
1106 | { | ||
1107 | struct dasd_device *device; | ||
1108 | unsigned long val; | ||
1109 | |||
1110 | device = dasd_device_from_cdev(to_ccwdev(dev)); | ||
1111 | if (IS_ERR(device)) | ||
1112 | return -ENODEV; | ||
1113 | |||
1114 | if ((strict_strtoul(buf, 10, &val) != 0) || | ||
1115 | (val > DASD_EXPIRES_MAX) || val == 0) { | ||
1116 | dasd_put_device(device); | ||
1117 | return -EINVAL; | ||
1118 | } | ||
1119 | |||
1120 | if (val) | ||
1121 | device->default_expires = val; | ||
1122 | |||
1123 | dasd_put_device(device); | ||
1124 | return count; | ||
1125 | } | ||
1126 | |||
1127 | static DEVICE_ATTR(expires, 0644, dasd_expires_show, dasd_expires_store); | ||
1128 | |||
1086 | static struct attribute * dasd_attrs[] = { | 1129 | static struct attribute * dasd_attrs[] = { |
1087 | &dev_attr_readonly.attr, | 1130 | &dev_attr_readonly.attr, |
1088 | &dev_attr_discipline.attr, | 1131 | &dev_attr_discipline.attr, |
@@ -1094,6 +1137,7 @@ static struct attribute * dasd_attrs[] = { | |||
1094 | &dev_attr_eer_enabled.attr, | 1137 | &dev_attr_eer_enabled.attr, |
1095 | &dev_attr_erplog.attr, | 1138 | &dev_attr_erplog.attr, |
1096 | &dev_attr_failfast.attr, | 1139 | &dev_attr_failfast.attr, |
1140 | &dev_attr_expires.attr, | ||
1097 | NULL, | 1141 | NULL, |
1098 | }; | 1142 | }; |
1099 | 1143 | ||