diff options
author | Stefan Haberland <stefan.haberland@de.ibm.com> | 2014-07-18 08:24:20 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2014-07-22 03:26:23 -0400 |
commit | 8fa56aed12f1b0a2828da52280e2efbbf1163ad5 (patch) | |
tree | e628581e9d5096dc968543f18657df28cdad6f8d | |
parent | 931a3dce819d2dedc731011c6fd7e6bb5aa188ef (diff) |
dasd: fix list_del corruption during format
If I/O errors occur during format a kernel panic with a list_del
corruption may occur.
Stop error recovery procedure after an erp action was taken.
Signed-off-by: Stefan Haberland <stefan.haberland@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
-rw-r--r-- | drivers/s390/block/dasd.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 9242d7cff9b5..925b056dc2b3 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -2307,8 +2307,12 @@ retry: | |||
2307 | 2307 | ||
2308 | rc = 0; | 2308 | rc = 0; |
2309 | list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) { | 2309 | list_for_each_entry_safe(cqr, n, ccw_queue, blocklist) { |
2310 | if (__dasd_sleep_on_erp(cqr)) | 2310 | if (__dasd_sleep_on_erp(cqr)) { |
2311 | if (!cqr->status == DASD_CQR_TERMINATED && | ||
2312 | !cqr->status == DASD_CQR_NEED_ERP) | ||
2313 | break; | ||
2311 | rc = 1; | 2314 | rc = 1; |
2315 | } | ||
2312 | } | 2316 | } |
2313 | if (rc) | 2317 | if (rc) |
2314 | goto retry; | 2318 | goto retry; |