| From f4c24db1b7ad0ce84409e15744d26c6f86a96840 Mon Sep 17 00:00:00 2001 |
| From: Joern Engel <joern@logfs.org> |
| Date: Fri, 3 Oct 2014 14:35:56 -0700 |
| Subject: qla_target: don't delete changed nacls |
| |
| From: Joern Engel <joern@logfs.org> |
| |
| commit f4c24db1b7ad0ce84409e15744d26c6f86a96840 upstream. |
| |
| The code is currently riddled with "drop the hardware_lock to avoid a |
| deadlock" bugs that expose races. One of those races seems to expose a |
| valid warning in tcm_qla2xxx_clear_nacl_from_fcport_map. Add some |
| bandaid to it. |
| |
| Signed-off-by: Joern Engel <joern@logfs.org> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/qla2xxx/tcm_qla2xxx.c | 11 ++++++++++- |
| 1 file changed, 10 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c |
| +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c |
| @@ -757,7 +757,16 @@ static void tcm_qla2xxx_clear_nacl_from_ |
| pr_debug("fc_rport domain: port_id 0x%06x\n", nacl->nport_id); |
| |
| node = btree_remove32(&lport->lport_fcport_map, nacl->nport_id); |
| - WARN_ON(node && (node != se_nacl)); |
| + if (WARN_ON(node && (node != se_nacl))) { |
| + /* |
| + * The nacl no longer matches what we think it should be. |
| + * Most likely a new dynamic acl has been added while |
| + * someone dropped the hardware lock. It clearly is a |
| + * bug elsewhere, but this bit can't make things worse. |
| + */ |
| + btree_insert32(&lport->lport_fcport_map, nacl->nport_id, |
| + node, GFP_ATOMIC); |
| + } |
| |
| pr_debug("Removed from fcport_map: %p for WWNN: 0x%016LX, port_id: 0x%06x\n", |
| se_nacl, nacl->nport_wwnn, nacl->nport_id); |