These are called with IRQs disabled from csio_mgmt_tmo_handler() so we
can't call spin_unlock_irq() or it will enable IRQs prematurely.

Fixes: a3667aaed569 ("[SCSI] csiostor: Chelsio FCoE offload driver")
Signed-off-by: Dan Carpenter <dan.carpen...@oracle.com>
---
 drivers/scsi/csiostor/csio_lnode.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/csiostor/csio_lnode.c 
b/drivers/scsi/csiostor/csio_lnode.c
index 66e58f0a75dc..23cbe4cda760 100644
--- a/drivers/scsi/csiostor/csio_lnode.c
+++ b/drivers/scsi/csiostor/csio_lnode.c
@@ -301,6 +301,7 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        struct fc_fdmi_port_name *port_name;
        uint8_t buf[64];
        uint8_t *fc4_type;
+       unsigned long flags;
 
        if (fdmi_req->wr_status != FW_SUCCESS) {
                csio_ln_dbg(ln, "WR error:%x in processing fdmi rhba cmd\n",
@@ -385,13 +386,13 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        len = (uint32_t)(pld - (uint8_t *)cmd);
 
        /* Submit FDMI RPA request */
-       spin_lock_irq(&hw->lock);
+       spin_lock_irqsave(&hw->lock, flags);
        if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_done,
                                FCOE_CT, &fdmi_req->dma_buf, len)) {
                CSIO_INC_STATS(ln, n_fdmi_err);
                csio_ln_dbg(ln, "Failed to issue fdmi rpa req\n");
        }
-       spin_unlock_irq(&hw->lock);
+       spin_unlock_irqrestore(&hw->lock, flags);
 }
 
 /*
@@ -412,6 +413,7 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        struct fc_fdmi_rpl *reg_pl;
        struct fs_fdmi_attrs *attrib_blk;
        uint8_t buf[64];
+       unsigned long flags;
 
        if (fdmi_req->wr_status != FW_SUCCESS) {
                csio_ln_dbg(ln, "WR error:%x in processing fdmi dprt cmd\n",
@@ -491,13 +493,13 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        attrib_blk->numattrs = htonl(numattrs);
 
        /* Submit FDMI RHBA request */
-       spin_lock_irq(&hw->lock);
+       spin_lock_irqsave(&hw->lock, flags);
        if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_rhba_cbfn,
                                FCOE_CT, &fdmi_req->dma_buf, len)) {
                CSIO_INC_STATS(ln, n_fdmi_err);
                csio_ln_dbg(ln, "Failed to issue fdmi rhba req\n");
        }
-       spin_unlock_irq(&hw->lock);
+       spin_unlock_irqrestore(&hw->lock, flags);
 }
 
 /*
@@ -512,6 +514,7 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        void *cmd;
        struct fc_fdmi_port_name *port_name;
        uint32_t len;
+       unsigned long flags;
 
        if (fdmi_req->wr_status != FW_SUCCESS) {
                csio_ln_dbg(ln, "WR error:%x in processing fdmi dhba cmd\n",
@@ -542,13 +545,13 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct 
csio_ioreq *fdmi_req)
        len += sizeof(*port_name);
 
        /* Submit FDMI request */
-       spin_lock_irq(&hw->lock);
+       spin_lock_irqsave(&hw->lock, flags);
        if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_dprt_cbfn,
                                FCOE_CT, &fdmi_req->dma_buf, len)) {
                CSIO_INC_STATS(ln, n_fdmi_err);
                csio_ln_dbg(ln, "Failed to issue fdmi dprt req\n");
        }
-       spin_unlock_irq(&hw->lock);
+       spin_unlock_irqrestore(&hw->lock, flags);
 }
 
 /**
-- 
2.20.1

Reply via email to