Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[SCSI] libsas: fix lockdep issue with ATA

lockdep noticed that with ATA support the port->dev_list_lock was
entangled at irq context, so it now needs to become IRQ safe

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by

James Bottomley and committed by
James Bottomley
9d720d82 0f05df8b

+10 -10
+4 -4
drivers/scsi/libsas/sas_discover.c
··· 304 304 port->disc.max_level = 0; 305 305 306 306 dev->rphy = rphy; 307 - spin_lock(&port->dev_list_lock); 307 + spin_lock_irq(&port->dev_list_lock); 308 308 list_add_tail(&dev->dev_list_node, &port->dev_list); 309 - spin_unlock(&port->dev_list_lock); 309 + spin_unlock_irq(&port->dev_list_lock); 310 310 311 311 return 0; 312 312 } ··· 703 703 sas_rphy_free(dev->rphy); 704 704 dev->rphy = NULL; 705 705 706 - spin_lock(&port->dev_list_lock); 706 + spin_lock_irq(&port->dev_list_lock); 707 707 list_del_init(&dev->dev_list_node); 708 - spin_unlock(&port->dev_list_lock); 708 + spin_unlock_irq(&port->dev_list_lock); 709 709 710 710 kfree(dev); /* not kobject_register-ed yet */ 711 711 port->port_dev = NULL;
+6 -6
drivers/scsi/libsas/sas_expander.c
··· 677 677 678 678 child->rphy = rphy; 679 679 680 - spin_lock(&parent->port->dev_list_lock); 680 + spin_lock_irq(&parent->port->dev_list_lock); 681 681 list_add_tail(&child->dev_list_node, &parent->port->dev_list); 682 - spin_unlock(&parent->port->dev_list_lock); 682 + spin_unlock_irq(&parent->port->dev_list_lock); 683 683 684 684 res = sas_discover_sata(child); 685 685 if (res) { ··· 701 701 child->rphy = rphy; 702 702 sas_fill_in_rphy(child, rphy); 703 703 704 - spin_lock(&parent->port->dev_list_lock); 704 + spin_lock_irq(&parent->port->dev_list_lock); 705 705 list_add_tail(&child->dev_list_node, &parent->port->dev_list); 706 - spin_unlock(&parent->port->dev_list_lock); 706 + spin_unlock_irq(&parent->port->dev_list_lock); 707 707 708 708 res = sas_discover_end_dev(child); 709 709 if (res) { ··· 816 816 sas_fill_in_rphy(child, rphy); 817 817 sas_rphy_add(rphy); 818 818 819 - spin_lock(&parent->port->dev_list_lock); 819 + spin_lock_irq(&parent->port->dev_list_lock); 820 820 list_add_tail(&child->dev_list_node, &parent->port->dev_list); 821 - spin_unlock(&parent->port->dev_list_lock); 821 + spin_unlock_irq(&parent->port->dev_list_lock); 822 822 823 823 res = sas_discover_expander(child); 824 824 if (res) {