]> git.baikalelectronics.ru Git - kernel.git/commit
[SCSI] scsi_remove_target: fix softlockup regression on hot remove
authorDan Williams <djbw@fb.com>
Wed, 29 Aug 2012 05:12:10 +0000 (22:12 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Mon, 24 Sep 2012 08:17:49 +0000 (12:17 +0400)
commitf197a99979f58142ec56392e729c936a0606d428
treeb1a5b23444144338e4c1937029f55940f82c638d
parent09907f5a832f6b90b32bc36d807a87f1666bd824
[SCSI] scsi_remove_target: fix softlockup regression on hot remove

John reports:
 BUG: soft lockup - CPU#2 stuck for 23s! [kworker/u:8:2202]
 [..]
 Call Trace:
  [<ffffffff8141782a>] scsi_remove_target+0xda/0x1f0
  [<ffffffff81421de5>] sas_rphy_remove+0x55/0x60
  [<ffffffff81421e01>] sas_rphy_delete+0x11/0x20
  [<ffffffff81421e35>] sas_port_delete+0x25/0x160
  [<ffffffff814549a3>] mptsas_del_end_device+0x183/0x270

...introduced by commit 0a07c0f "[SCSI] fix hot unplug vs async scan race".

Don't restart lookup of more stargets in the multi-target case, just
arrange to traverse the list once, on the assumption that new targets
are always added at the end.  There is no guarantee that the target will
change state in scsi_target_reap() so we can end up spinning if we
restart.

Cc: <stable@vger.kernel.org>
Acked-by: Jack Wang <jack_wang@usish.com>
LKML-Reference: <CAEhu1-6wq1YsNiscGMwP4ud0Q+MrViRzv=kcWCQSBNc8c68N5Q@mail.gmail.com>
Reported-by: John Drescher <drescherjm@gmail.com>
Tested-by: John Drescher <drescherjm@gmail.com>
Signed-off-by: Dan Williams <djbw@fb.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/scsi_sysfs.c