On Tue, Jul 26, 2011 at 11:10 PM, Luben Tuikov <ltuikov@xxxxxxxxx> wrote: > If expander discovery fails (sas_discover_expander()), > remove the expander from the port device list > (sas_ex_discover_expander()), before freeing it. Else > the list is corrupted and, e.g., when we attempt to send > SMP commands to other devices, the kernel oopses. > > Signed-off-by: Luben Tuikov <ltuikov@xxxxxxxxx> > Reviewed-by: Jack Wang <jack_wang@xxxxxxxxx> > --- > drivers/scsi/libsas/sas_expander.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > > diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_expander.c > index 874e29d..f84084b 100644 > --- a/drivers/scsi/libsas/sas_expander.c > +++ b/drivers/scsi/libsas/sas_expander.c > @@ -849,6 +849,9 @@ static struct domain_device *sas_ex_discover_expander( > > res = sas_discover_expander(child); > if (res) { > + spin_lock_irq(&parent->port->dev_list_lock); > + list_del(&child->dev_list_node); > + spin_unlock_irq(&parent->port->dev_list_lock); > kfree(child); > return NULL; Acked-by: Dan Williams <dan.j.williams@xxxxxxxxx> ...but it raises a couple questions for potential follow on patches: 1/ Do we need to add the device to port->dev_list prior to the discovery? Seems cleaner to defer the list_add until after the discovery has succeeded. 2/ We have unlocked list manipulations in sas_ex_discover_end_dev(), sas_unregister_common_dev(), and sas_ex_discover_end_dev() -- Dan -- 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