s390/qeth: fix deadlock during failing recovery
authorAlexandra Winter <wintera@linux.ibm.com>
Tue, 21 Sep 2021 14:52:17 +0000 (16:52 +0200)
committerJakub Kicinski <kuba@kernel.org>
Wed, 22 Sep 2021 03:02:24 +0000 (20:02 -0700)
commitd2b59bd4b06d84a4eadb520b0f71c62fe8ec0a62
tree7e5fe772eed361a7afc9e9f0accc14e1e8a05841
parentee909d0b1dac8632eeb78cbf17661d6c7674bbd0
s390/qeth: fix deadlock during failing recovery

Commit 0b9902c1fcc5 ("s390/qeth: fix deadlock during recovery") removed
taking discipline_mutex inside qeth_do_reset(), fixing potential
deadlocks. An error path was missed though, that still takes
discipline_mutex and thus has the original deadlock potential.

Intermittent deadlocks were seen when a qeth channel path is configured
offline, causing a race between qeth_do_reset and ccwgroup_remove.
Call qeth_set_offline() directly in the qeth_do_reset() error case and
then a new variant of ccwgroup_set_offline(), without taking
discipline_mutex.

Fixes: b41b554c1ee7 ("s390/qeth: fix locking for discipline setup / removal")
Signed-off-by: Alexandra Winter <wintera@linux.ibm.com>
Reviewed-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
arch/s390/include/asm/ccwgroup.h
drivers/s390/cio/ccwgroup.c
drivers/s390/net/qeth_core_main.c