diff options
author | Karsten Keil <kkeil@linux-pingi.de> | 2012-05-16 01:51:01 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-16 21:22:06 +0200 |
commit | 1368112c07bae879fa3d1c21f236ca8eea3e5e84 (patch) | |
tree | 3467a277cc350bbfaf3e98df9513d4209e63f984 /drivers/isdn/hardware/mISDN/mISDNipac.c | |
parent | Documentation/networking/ieee802154: update MAC chapter (diff) | |
download | linux-1368112c07bae879fa3d1c21f236ca8eea3e5e84.tar.xz linux-1368112c07bae879fa3d1c21f236ca8eea3e5e84.zip |
mISDN: Cleanup channel also if it already was deactivated
If a channel was closed after it was deactivated it could happen that
something was not proper resetted. The test if a channel is still activ
was wrong, so remove it and always do the cleanup.
Signed-off-by: Karsten Keil <kkeil@linux-pingi.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/isdn/hardware/mISDN/mISDNipac.c')
-rw-r--r-- | drivers/isdn/hardware/mISDN/mISDNipac.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/isdn/hardware/mISDN/mISDNipac.c b/drivers/isdn/hardware/mISDN/mISDNipac.c index 92d4a78bc0a5..6c044d55536b 100644 --- a/drivers/isdn/hardware/mISDN/mISDNipac.c +++ b/drivers/isdn/hardware/mISDN/mISDNipac.c @@ -1420,15 +1420,10 @@ hscx_bctrl(struct mISDNchannel *ch, u32 cmd, void *arg) switch (cmd) { case CLOSE_CHANNEL: test_and_clear_bit(FLG_OPEN, &bch->Flags); - if (test_bit(FLG_ACTIVE, &bch->Flags)) { - spin_lock_irqsave(hx->ip->hwlock, flags); - mISDN_freebchannel(bch); - hscx_mode(hx, ISDN_P_NONE); - spin_unlock_irqrestore(hx->ip->hwlock, flags); - } else { - skb_queue_purge(&bch->rqueue); - bch->rcount = 0; - } + spin_lock_irqsave(hx->ip->hwlock, flags); + mISDN_freebchannel(bch); + hscx_mode(hx, ISDN_P_NONE); + spin_unlock_irqrestore(hx->ip->hwlock, flags); ch->protocol = ISDN_P_NONE; ch->peer = NULL; module_put(hx->ip->owner); |