From 58f0d1a91608be95bea75f602e02b60e298da6ee Mon Sep 17 00:00:00 2001 From: "Klaus D. Wacker" Date: Fri, 5 Oct 2007 16:45:47 +0200 Subject: [PATCH] --- yaml --- r: 66927 b: refs/heads/master c: 59579da329b22bcddc5da0c22c61d6dc1f9eb96a h: refs/heads/master i: 66925: 761b38541816b38b7760d575a14c3a21289f7bc2 66923: 86f6fa0796a58f145b899a61c32c1cacc26b9f4b 66919: ae2216af55944468fe1268f78166cf9ae0bcbd17 66911: f36fe6a343faac550c24000eb23a2a405d4b0383 v: v3 --- [refs] | 2 +- trunk/drivers/s390/net/lcs.c | 11 ++++++++--- trunk/drivers/s390/net/lcs.h | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 8f4c9c50e783..a211dcbe7d67 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d8fae9c2f2642ffe411424ed2e4677f959168152 +refs/heads/master: 59579da329b22bcddc5da0c22c61d6dc1f9eb96a diff --git a/trunk/drivers/s390/net/lcs.c b/trunk/drivers/s390/net/lcs.c index e4b11afbbc9f..0fd663b23d76 100644 --- a/trunk/drivers/s390/net/lcs.c +++ b/trunk/drivers/s390/net/lcs.c @@ -1400,11 +1400,14 @@ lcs_irq(struct ccw_device *cdev, unsigned long intparm, struct irb *irb) PRINT_WARN("check on device %s, dstat=0x%X, cstat=0x%X \n", cdev->dev.bus_id, dstat, cstat); if (rc) { - lcs_schedule_recovery(card); - wake_up(&card->wait_q); - return; + channel->state = LCS_CH_STATE_ERROR; } } + if (channel->state == LCS_CH_STATE_ERROR) { + lcs_schedule_recovery(card); + wake_up(&card->wait_q); + return; + } /* How far in the ccw chain have we processed? */ if ((channel->state != LCS_CH_STATE_INIT) && (irb->scsw.fctl & SCSW_FCTL_START_FUNC)) { @@ -1708,6 +1711,8 @@ lcs_stopcard(struct lcs_card *card) if (card->read.state != LCS_CH_STATE_STOPPED && card->write.state != LCS_CH_STATE_STOPPED && + card->read.state != LCS_CH_STATE_ERROR && + card->write.state != LCS_CH_STATE_ERROR && card->state == DEV_STATE_UP) { lcs_clear_multicast_list(card); rc = lcs_send_stoplan(card,LCS_INITIATOR_TCPIP); diff --git a/trunk/drivers/s390/net/lcs.h b/trunk/drivers/s390/net/lcs.h index 0e1e4a0a88f0..8976fb0b070a 100644 --- a/trunk/drivers/s390/net/lcs.h +++ b/trunk/drivers/s390/net/lcs.h @@ -138,6 +138,7 @@ enum lcs_channel_states { LCS_CH_STATE_RUNNING, LCS_CH_STATE_SUSPENDED, LCS_CH_STATE_CLEARED, + LCS_CH_STATE_ERROR, }; /**