diff options
author | Vasu Dev <vasu.dev@intel.com> | 2012-04-20 12:16:32 -0700 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-05-10 08:59:25 +0100 |
commit | 061446a159c5a0ec7047f9979866ffa7e0587b25 (patch) | |
tree | 8ac30cad818471ef410148379a0ea4d4455f9749 /drivers/scsi/libfc | |
parent | 433eba04c2cb53e0bbd2fb6da22d18f725bbf33f (diff) |
[SCSI] libfc: flush lport worker after its disabled
The lport could get timeout armed while its getting disabled,
so flush lport worker after its disabled and ignore lport
retry in that case instead of WARN_ON.
[13192.936858] WARNING: at drivers/scsi/libfc/fc_lport.c:1573 fc_lport_timeout+0x53/0xa9 [libfc]()
[13192.938026] Hardware name: Bochs
[13192.938620] Modules linked in: fcoe libfcoe libfc scsi_transport_fc scsi_tgt fuse 8021q garp stp llc sunrpc ipv6 uinput microcode joydev pcspkr ixgbe e1000 i2c_piix4 i2c_core virtio_balloon dca mdio virtio_blk virtio_pci virtio_ring virtio floppy [last unloaded: speedstep_lib]
[13192.942589] Pid: 23605, comm: kworker/0:6 Tainted: G W 3.2.0+ #71
[13192.943587] Call Trace:
[13192.944052] [<ffffffff810403f4>] warn_slowpath_common+0x85/0x9d
[13192.944940] [<ffffffff81040426>] warn_slowpath_null+0x1a/0x1c
[13192.945734] [<ffffffffa02746eb>] fc_lport_timeout+0x53/0xa9 [libfc]
[13192.946665] [<ffffffff81058d88>] process_one_work+0x20c/0x3ad
[13192.947541] [<ffffffff81058cbe>] ? process_one_work+0x142/0x3ad
[13192.948423] [<ffffffffa0274698>] ? fc_lport_enter_ns+0x178/0x178 [libfc]
[13192.949363] [<ffffffff8105a313>] worker_thread+0xfd/0x181
[13192.950191] [<ffffffff8105a216>] ? manage_workers.clone.15+0x173/0x173
[13192.951100] [<ffffffff8105e19b>] kthread+0xa4/0xac
[13192.951755] [<ffffffff814edbb4>] kernel_thread_helper+0x4/0x10
[13192.952520] [<ffffffff814e5cb4>] ? retint_restore_args+0x13/0x13
[13192.953398] [<ffffffff8105e0f7>] ? __init_kthread_worker+0x5b/0x5b
[13192.954278] [<ffffffff814edbb0>] ? gs_change+0x13/0x13
[13192.954911] ---[ end trace 9763213b95bbd803 ]---
Signed-off-by: Vasu Dev <vasu.dev@intel.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Robert Love <robert.w.love@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/libfc')
-rw-r--r-- | drivers/scsi/libfc/fc_lport.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/scsi/libfc/fc_lport.c b/drivers/scsi/libfc/fc_lport.c index ef9560dff29..fb6610b249e 100644 --- a/drivers/scsi/libfc/fc_lport.c +++ b/drivers/scsi/libfc/fc_lport.c @@ -648,6 +648,7 @@ int fc_lport_destroy(struct fc_lport *lport) lport->tt.fcp_abort_io(lport); lport->tt.disc_stop_final(lport); lport->tt.exch_mgr_reset(lport, 0, 0); + cancel_delayed_work_sync(&lport->retry_work); fc_fc4_del_lport(lport); return 0; } @@ -1564,7 +1565,6 @@ static void fc_lport_timeout(struct work_struct *work) switch (lport->state) { case LPORT_ST_DISABLED: - WARN_ON(1); break; case LPORT_ST_READY: break; |