summaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/css.h
diff options
context:
space:
mode:
authorVineeth Vijayan <vneethv@linux.ibm.com>2021-09-10 13:45:24 +0200
committerHeiko Carstens <hca@linux.ibm.com>2021-09-27 13:54:38 +0200
commit172da89ed0eaf9d9348f5decb86ad04c624b39d1 (patch)
treeeb2b3cdb8e1890633dde2a354b97b236b80178cd /drivers/s390/cio/css.h
parent5816b3e6577eaa676ceb00a848f0fd65fe2adc29 (diff)
downloadlinux-stable-172da89ed0eaf9d9348f5decb86ad04c624b39d1.tar.gz
linux-stable-172da89ed0eaf9d9348f5decb86ad04c624b39d1.tar.bz2
linux-stable-172da89ed0eaf9d9348f5decb86ad04c624b39d1.zip
s390/cio: avoid excessive path-verification requests
Currently when removing a device from cio_ignore list, we trigger a path-verification for all the subchannels available in the system. This could lead to path-verification requests on subchannels with an online device, which could cause unwanted delay. Instead of all the subchannels, trigger the path-verifications to those without an online device. Reported-by: Julian Wiedmann <jwi@linux.ibm.com> Fixes: 2297791c92d0 ("s390/cio: dont unregister subchannel from child-drivers") Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com> Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'drivers/s390/cio/css.h')
-rw-r--r--drivers/s390/cio/css.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/s390/cio/css.h b/drivers/s390/cio/css.h
index c98522cbe276..ede0b905bc6f 100644
--- a/drivers/s390/cio/css.h
+++ b/drivers/s390/cio/css.h
@@ -34,6 +34,14 @@
#define SNID_STATE3_MULTI_PATH 1
#define SNID_STATE3_SINGLE_PATH 0
+/*
+ * Conditions used to specify which subchannels need evaluation
+ */
+enum css_eval_cond {
+ CSS_EVAL_UNREG, /* unregistered subchannels */
+ CSS_EVAL_NOT_ONLINE /* sch without an online-device */
+};
+
struct path_state {
__u8 state1 : 2; /* path state value 1 */
__u8 state2 : 2; /* path state value 2 */
@@ -136,7 +144,7 @@ static inline struct channel_subsystem *css_by_id(u8 cssid)
/* Helper functions to build lists for the slow path. */
void css_schedule_eval(struct subchannel_id schid);
void css_schedule_eval_all(void);
-void css_schedule_eval_all_unreg(unsigned long delay);
+void css_schedule_eval_cond(enum css_eval_cond, unsigned long delay);
int css_complete_work(void);
int sch_is_pseudo_sch(struct subchannel *);