> - list_for_each_entry(starget, &shost->__targets, siblings) { > + list_for_each_entry_safe(starget, tmp, &shost->__targets, siblings) { > if (starget->state == STARGET_DEL) > continue; > if (starget->dev.parent == dev || &starget->dev == dev) { > /* assuming new targets arrive at the end */ Now that the last variable is gone this comments isn't needed. > kref_get(&starget->reap_ref); > spin_unlock_irqrestore(shost->host_lock, flags); > - if (last) > - scsi_target_reap(last); > - last = starget; > + > __scsi_remove_target(starget); > + list_move_tail(&starget->siblings, &reap_list); > spin_lock_irqsave(shost->host_lock, flags); > } What makes the list_move save after dropping host_lock? I think this needs to be changed to not drop the host_lock and change __scsi_remove_target to expect host_lock held to be safe. -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html