[S390] cio: Try harder to disable subchannel.
Acting upon the assumption that cio_disable_subchannel() is only called when we really want to disable the subchannel (a) remove the check for activity (it is already done in ccw_device_offline(), which is the place where it matters) (b) collect pending status via tsch() and ignore it (it can't matter anymore since the subchannel will be disabled). Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Этот коммит содержится в:

коммит произвёл
Martin Schwidefsky

родитель
eb32ae8d0e
Коммит
ed04b892e2
@@ -472,6 +472,7 @@ EXPORT_SYMBOL_GPL(cio_enable_subchannel);
|
||||
int cio_disable_subchannel(struct subchannel *sch)
|
||||
{
|
||||
char dbf_txt[15];
|
||||
int retry;
|
||||
int ret;
|
||||
|
||||
CIO_TRACE_EVENT (2, "dissch");
|
||||
@@ -482,16 +483,17 @@ int cio_disable_subchannel(struct subchannel *sch)
|
||||
if (cio_update_schib(sch))
|
||||
return -ENODEV;
|
||||
|
||||
if (scsw_actl(&sch->schib.scsw) != 0)
|
||||
/*
|
||||
* the disable function must not be called while there are
|
||||
* requests pending for completion !
|
||||
*/
|
||||
return -EBUSY;
|
||||
|
||||
sch->config.ena = 0;
|
||||
ret = cio_commit_config(sch);
|
||||
|
||||
for (retry = 0; retry < 3; retry++) {
|
||||
ret = cio_commit_config(sch);
|
||||
if (ret == -EBUSY) {
|
||||
struct irb irb;
|
||||
if (tsch(sch->schid, &irb) != 0)
|
||||
break;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
sprintf (dbf_txt, "ret:%d", ret);
|
||||
CIO_TRACE_EVENT (2, dbf_txt);
|
||||
return ret;
|
||||
|
Ссылка в новой задаче
Block a user