diff options
Diffstat (limited to 'drivers/s390/net/lcs.c')
-rw-r--r-- | drivers/s390/net/lcs.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/s390/net/lcs.c b/drivers/s390/net/lcs.c index e4b11afbbc9f..0fd663b23d76 100644 --- a/drivers/s390/net/lcs.c +++ b/drivers/s390/net/lcs.c | |||
@@ -1400,11 +1400,14 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb) | |||
1400 | PRINT_WARN("check on device %s, dstat=0x%X, cstat=0x%X \n", | 1400 | PRINT_WARN("check on device %s, dstat=0x%X, cstat=0x%X \n", |
1401 | cdev->dev.bus_id, dstat, cstat); | 1401 | cdev->dev.bus_id, dstat, cstat); |
1402 | if (rc) { | 1402 | if (rc) { |
1403 | lcs_schedule_recovery(card); | 1403 | channel->state = LCS_CH_STATE_ERROR; |
1404 | wake_up(&card->wait_q); | ||
1405 | return; | ||
1406 | } | 1404 | } |
1407 | } | 1405 | } |
1406 | if (channel->state == LCS_CH_STATE_ERROR) { | ||
1407 | lcs_schedule_recovery(card); | ||
1408 | wake_up(&card->wait_q); | ||
1409 | return; | ||
1410 | } | ||
1408 | /* How far in the ccw chain have we processed? */ | 1411 | /* How far in the ccw chain have we processed? */ |
1409 | if ((channel->state != LCS_CH_STATE_INIT) && | 1412 | if ((channel->state != LCS_CH_STATE_INIT) && |
1410 | (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { | 1413 | (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { |
@@ -1708,6 +1711,8 @@ lcs_stopcard(struct lcs_card *card) | |||
1708 | 1711 | ||
1709 | if (card->read.state != LCS_CH_STATE_STOPPED && | 1712 | if (card->read.state != LCS_CH_STATE_STOPPED && |
1710 | card->write.state != LCS_CH_STATE_STOPPED && | 1713 | card->write.state != LCS_CH_STATE_STOPPED && |
1714 | card->read.state != LCS_CH_STATE_ERROR && | ||
1715 | card->write.state != LCS_CH_STATE_ERROR && | ||
1711 | card->state == DEV_STATE_UP) { | 1716 | card->state == DEV_STATE_UP) { |
1712 | lcs_clear_multicast_list(card); | 1717 | lcs_clear_multicast_list(card); |
1713 | rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP); | 1718 | rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP); |