[SCSI] libsas: fix port->dev_list locking
authorDan Williams <dan.j.williams@intel.com>
Thu, 22 Sep 2011 05:05:34 +0000 (22:05 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 16 Oct 2011 15:54:02 +0000 (10:54 -0500)
commit1a34c0640137eed8dabdac3a68a7a84116ac9e0d
treefbe141523906f19c10c80bbdbdd4a69446c5fa44
parent29f366e8a99fdced4c0b5417a478d7539adc66d3
[SCSI] libsas: fix port->dev_list locking

port->dev_list maintains a list of devices attached to a given sas root port.
It needs to be mutated under a lock as contexts outside of the
single-threaded-libsas-workqueue access the list via sas_find_dev_by_rphy().
Fixup locations where the list was being mutated without a lock.

This is a follow-up to commit 5911e963 "[SCSI] libsas: remove expander
from dev list on error", where Luben noted [1]:

    > 2/ We have unlocked list manipulations in sas_ex_discover_end_dev(),
    > sas_unregister_common_dev(), and sas_ex_discover_end_dev()

    Yes, I can see that and that is very unfortunate.

[1]: http://marc.info/?l=linux-scsi&m=131480962006471&w=2

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/libsas/sas_discover.c
drivers/scsi/libsas/sas_expander.c
include/scsi/libsas.h