s390/cio: add rescan functionality on channel subsystem

This patch introduces a new rescan sys-interface for channel-subsystem.
The rescan interface allows the user to invoke an evaluation of all
subchannels defined in the I/O configuration.

The new rescan interface can be found at /sys/devices/css0/rescan
and can be triggered by,

echo > /sys/devices/css0/rescan

Writing to this interface triggers subchannel evaluation. The write
request completes only after scan-related work has completed

This user-invoked subchannel evaluation allows manual recovery in error
situations such as:
 - restart of device discovery after resolution of temporary device
   error
 - inconsistent OS view of subchannel state due to missing state-change
   interrupts (CRWs)

Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
Vineeth Vijayan 2021-04-25 11:27:59 +02:00 committed by Vasily Gorbik
parent c78d0c7484
commit cec0c58d34
1 changed files with 13 additions and 0 deletions

View File

@ -886,6 +886,18 @@ static ssize_t real_cssid_show(struct device *dev, struct device_attribute *a,
}
static DEVICE_ATTR_RO(real_cssid);
static ssize_t rescan_store(struct device *dev, struct device_attribute *a,
const char *buf, size_t count)
{
CIO_TRACE_EVENT(4, "usr-rescan");
css_schedule_eval_all();
css_complete_work();
return count;
}
static DEVICE_ATTR_WO(rescan);
static ssize_t cm_enable_show(struct device *dev, struct device_attribute *a,
char *buf)
{
@ -932,6 +944,7 @@ static umode_t cm_enable_mode(struct kobject *kobj, struct attribute *attr,
static struct attribute *cssdev_attrs[] = {
&dev_attr_real_cssid.attr,
&dev_attr_rescan.attr,
NULL,
};