Commit b8784f77455124ceb4746e798f7aaf5b3b8a5406

Authored by James Bottomley
1 parent 1f723867e6

[SCSI] libata: fix locking for sas paths

For historical reasons, libsas uses the scsi host lock as the ata port
lock, and libata always uses the ata host.  For the old eh, this was
largely irrelevant since the two locks were never mixed inside the
code.  However, the new eh has a case where it nests acquisition of
the host lock inside the port lock (this does look rather deadlock
prone).  Obviously this would be an instant deadlock if the port lock
were the host lock, so switch the libsas paths to use the ata host
lock as well.

Cc: Tejun Heo <tj@kernel.org>
Cc: Jeff Garzik <jeff@garzik.org>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>

Showing 1 changed file with 1 additions and 1 deletions Side-by-side Diff

drivers/ata/libata-scsi.c
... ... @@ -3747,7 +3747,7 @@
3747 3747 return NULL;
3748 3748  
3749 3749 ap->port_no = 0;
3750   - ap->lock = shost->host_lock;
  3750 + ap->lock = &host->lock;
3751 3751 ap->pio_mask = port_info->pio_mask;
3752 3752 ap->mwdma_mask = port_info->mwdma_mask;
3753 3753 ap->udma_mask = port_info->udma_mask;