Messages in this thread | | | Date | Wed, 27 Jul 2011 13:32:50 -0700 | Subject | Re: [PATCH] [SCSI] libsas: remove expander from dev list on error | From | Dan Williams <> |
| |
On Tue, Jul 26, 2011 at 11:10 PM, Luben Tuikov <ltuikov@yahoo.com> 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@yahoo.com> > Reviewed-by: Jack Wang <jack_wang@usish.com> > --- > 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@intel.com>
...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-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |