Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=06f923cbf080e22d1ffccbf3fd2cbab0176f6025
Commit:     06f923cbf080e22d1ffccbf3fd2cbab0176f6025
Parent:     3d0e91f7ace12499c4b00088e9a6b1361e1bb0ca
Author:     Brian King <[EMAIL PROTECTED]>
AuthorDate: Wed Jun 13 17:12:33 2007 -0500
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Sun Jun 17 15:53:17 2007 -0500

    [SCSI] ibmvscsi: Misc. locking fixes
    
    Fix a couple locking bugs discovered during code inspection.
    ibmvscsi_send_srp_event needs to be called with the host lock
    held. This patch fixes a couple paths in the code where this
    wasn't true.
    
    Signed-off-by: Brian King <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/ibmvscsi/ibmvscsi.c |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 0a16972..934bcad 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -845,6 +845,7 @@ static void send_mad_adapter_info(struct ibmvscsi_host_data 
*hostdata)
 {
        struct viosrp_adapter_info *req;
        struct srp_event_struct *evt_struct;
+       unsigned long flags;
        dma_addr_t addr;
 
        evt_struct = get_event_struct(&hostdata->pool);
@@ -875,6 +876,7 @@ static void send_mad_adapter_info(struct ibmvscsi_host_data 
*hostdata)
                return;
        }
        
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        if (ibmvscsi_send_srp_event(evt_struct, hostdata, init_timeout * 2)) {
                dev_err(hostdata->dev, "couldn't send ADAPTER_INFO_REQ!\n");
                dma_unmap_single(hostdata->dev,
@@ -882,6 +884,7 @@ static void send_mad_adapter_info(struct ibmvscsi_host_data 
*hostdata)
                                 sizeof(hostdata->madapter_info),
                                 DMA_BIDIRECTIONAL);
        }
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
 };
 
 /**
@@ -1357,6 +1360,7 @@ static int ibmvscsi_do_host_config(struct 
ibmvscsi_host_data *hostdata,
 {
        struct viosrp_host_config *host_config;
        struct srp_event_struct *evt_struct;
+       unsigned long flags;
        dma_addr_t addr;
        int rc;
 
@@ -1388,7 +1392,9 @@ static int ibmvscsi_do_host_config(struct 
ibmvscsi_host_data *hostdata,
        }
 
        init_completion(&evt_struct->comp);
+       spin_lock_irqsave(hostdata->host->host_lock, flags);
        rc = ibmvscsi_send_srp_event(evt_struct, hostdata, init_timeout * 2);
+       spin_unlock_irqrestore(hostdata->host->host_lock, flags);
        if (rc == 0)
                wait_for_completion(&evt_struct->comp);
        dma_unmap_single(hostdata->dev, addr, length, DMA_BIDIRECTIONAL);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to