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 /drivers | |
| 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>
Diffstat (limited to 'drivers')
| -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; |
