提交 04333393 编写于 作者: J James Bottomley 提交者: Linus Torvalds

[PATCH] Fix Fibre Channel boot oops

The oops is characteristic of the underlying device being removed from
visibility before the class device, and sure enough we do device_del()
before transport_unregister() in the scsi_target_reap() routines.  I've
no idea why this is suddenly showing up, since the code has been in
there since that function was first invented.  However, I've confirmed
this fixes Andrew Vasquez's boot oops.
Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 f89f5948
...@@ -418,8 +418,9 @@ static void scsi_target_reap_work(void *data) { ...@@ -418,8 +418,9 @@ static void scsi_target_reap_work(void *data) {
if (--starget->reap_ref == 0 && list_empty(&starget->devices)) { if (--starget->reap_ref == 0 && list_empty(&starget->devices)) {
list_del_init(&starget->siblings); list_del_init(&starget->siblings);
spin_unlock_irqrestore(shost->host_lock, flags); spin_unlock_irqrestore(shost->host_lock, flags);
transport_remove_device(&starget->dev);
device_del(&starget->dev); device_del(&starget->dev);
transport_unregister_device(&starget->dev); transport_destroy_device(&starget->dev);
put_device(&starget->dev); put_device(&starget->dev);
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册