mISDN: Fix wrong usage of flush_work_sync while holding locks
It is a bad idea to hold a spinlock and call flush_work_sync. Move the workqueue cleanup outside the spinlock and use cancel_work_sync, on closing the channel this seems to be the more correct function. Remove the never used and constant return value of mISDN_freebchannel. Signed-off-by: Karsten Keil <keil@b1-systems.de> Cc: <stable@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
这个提交包含在:
@@ -1054,8 +1054,9 @@ w6692_bctrl(struct mISDNchannel *ch, u32 cmd, void *arg)
|
||||
switch (cmd) {
|
||||
case CLOSE_CHANNEL:
|
||||
test_and_clear_bit(FLG_OPEN, &bch->Flags);
|
||||
cancel_work_sync(&bch->workq);
|
||||
spin_lock_irqsave(&card->lock, flags);
|
||||
mISDN_freebchannel(bch);
|
||||
mISDN_clear_bchannel(bch);
|
||||
w6692_mode(bc, ISDN_P_NONE);
|
||||
spin_unlock_irqrestore(&card->lock, flags);
|
||||
ch->protocol = ISDN_P_NONE;
|
||||
|
在新工单中引用
屏蔽一个用户