diff options
author | Suresh Reddy <suresh.reddy@emulex.com> | 2013-04-24 20:56:55 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-04-29 12:33:47 -0400 |
commit | d98ef50fd99585e43b77b5ac5943e4450031a18e (patch) | |
tree | 2da7ec06016adb12a23d60da82c395c91c7198b1 /drivers/net/ethernet | |
parent | 2c1bbbffa0b644fab4f91878cde0c2e8f52e2dcc (diff) |
be2net: Fixed memory leak
Signed-off-by: Suresh Reddy <suresh.reddy@emulex.com>
Signed-off-by: Sarveshwar Bandi <sarveshwar.bandi@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index ce5af9b3b704..24c80d1d70ba 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c | |||
@@ -2493,6 +2493,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter) | |||
2493 | struct mgmt_controller_attrib *attribs; | 2493 | struct mgmt_controller_attrib *attribs; |
2494 | struct be_dma_mem attribs_cmd; | 2494 | struct be_dma_mem attribs_cmd; |
2495 | 2495 | ||
2496 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
2497 | return -1; | ||
2498 | |||
2496 | memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); | 2499 | memset(&attribs_cmd, 0, sizeof(struct be_dma_mem)); |
2497 | attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); | 2500 | attribs_cmd.size = sizeof(struct be_cmd_resp_cntl_attribs); |
2498 | attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, | 2501 | attribs_cmd.va = pci_alloc_consistent(adapter->pdev, attribs_cmd.size, |
@@ -2500,12 +2503,10 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter) | |||
2500 | if (!attribs_cmd.va) { | 2503 | if (!attribs_cmd.va) { |
2501 | dev_err(&adapter->pdev->dev, | 2504 | dev_err(&adapter->pdev->dev, |
2502 | "Memory allocation failure\n"); | 2505 | "Memory allocation failure\n"); |
2503 | return -ENOMEM; | 2506 | status = -ENOMEM; |
2507 | goto err; | ||
2504 | } | 2508 | } |
2505 | 2509 | ||
2506 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
2507 | return -1; | ||
2508 | |||
2509 | wrb = wrb_from_mbox(adapter); | 2510 | wrb = wrb_from_mbox(adapter); |
2510 | if (!wrb) { | 2511 | if (!wrb) { |
2511 | status = -EBUSY; | 2512 | status = -EBUSY; |
@@ -2525,8 +2526,9 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter) | |||
2525 | 2526 | ||
2526 | err: | 2527 | err: |
2527 | mutex_unlock(&adapter->mbox_lock); | 2528 | mutex_unlock(&adapter->mbox_lock); |
2528 | pci_free_consistent(adapter->pdev, attribs_cmd.size, attribs_cmd.va, | 2529 | if (attribs_cmd.va) |
2529 | attribs_cmd.dma); | 2530 | pci_free_consistent(adapter->pdev, attribs_cmd.size, |
2531 | attribs_cmd.va, attribs_cmd.dma); | ||
2530 | return status; | 2532 | return status; |
2531 | } | 2533 | } |
2532 | 2534 | ||
@@ -2826,6 +2828,9 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) | |||
2826 | CMD_SUBSYSTEM_ETH)) | 2828 | CMD_SUBSYSTEM_ETH)) |
2827 | return -EPERM; | 2829 | return -EPERM; |
2828 | 2830 | ||
2831 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
2832 | return -1; | ||
2833 | |||
2829 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 2834 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
2830 | cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); | 2835 | cmd.size = sizeof(struct be_cmd_resp_acpi_wol_magic_config_v1); |
2831 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, | 2836 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, |
@@ -2833,12 +2838,10 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) | |||
2833 | if (!cmd.va) { | 2838 | if (!cmd.va) { |
2834 | dev_err(&adapter->pdev->dev, | 2839 | dev_err(&adapter->pdev->dev, |
2835 | "Memory allocation failure\n"); | 2840 | "Memory allocation failure\n"); |
2836 | return -ENOMEM; | 2841 | status = -ENOMEM; |
2842 | goto err; | ||
2837 | } | 2843 | } |
2838 | 2844 | ||
2839 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
2840 | return -1; | ||
2841 | |||
2842 | wrb = wrb_from_mbox(adapter); | 2845 | wrb = wrb_from_mbox(adapter); |
2843 | if (!wrb) { | 2846 | if (!wrb) { |
2844 | status = -EBUSY; | 2847 | status = -EBUSY; |
@@ -2869,7 +2872,8 @@ int be_cmd_get_acpi_wol_cap(struct be_adapter *adapter) | |||
2869 | } | 2872 | } |
2870 | err: | 2873 | err: |
2871 | mutex_unlock(&adapter->mbox_lock); | 2874 | mutex_unlock(&adapter->mbox_lock); |
2872 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | 2875 | if (cmd.va) |
2876 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); | ||
2873 | return status; | 2877 | return status; |
2874 | 2878 | ||
2875 | } | 2879 | } |
@@ -3001,16 +3005,18 @@ int be_cmd_get_func_config(struct be_adapter *adapter) | |||
3001 | int status; | 3005 | int status; |
3002 | struct be_dma_mem cmd; | 3006 | struct be_dma_mem cmd; |
3003 | 3007 | ||
3008 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
3009 | return -1; | ||
3010 | |||
3004 | memset(&cmd, 0, sizeof(struct be_dma_mem)); | 3011 | memset(&cmd, 0, sizeof(struct be_dma_mem)); |
3005 | cmd.size = sizeof(struct be_cmd_resp_get_func_config); | 3012 | cmd.size = sizeof(struct be_cmd_resp_get_func_config); |
3006 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, | 3013 | cmd.va = pci_alloc_consistent(adapter->pdev, cmd.size, |
3007 | &cmd.dma); | 3014 | &cmd.dma); |
3008 | if (!cmd.va) { | 3015 | if (!cmd.va) { |
3009 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); | 3016 | dev_err(&adapter->pdev->dev, "Memory alloc failure\n"); |
3010 | return -ENOMEM; | 3017 | status = -ENOMEM; |
3018 | goto err; | ||
3011 | } | 3019 | } |
3012 | if (mutex_lock_interruptible(&adapter->mbox_lock)) | ||
3013 | return -1; | ||
3014 | 3020 | ||
3015 | wrb = wrb_from_mbox(adapter); | 3021 | wrb = wrb_from_mbox(adapter); |
3016 | if (!wrb) { | 3022 | if (!wrb) { |
@@ -3050,8 +3056,8 @@ int be_cmd_get_func_config(struct be_adapter *adapter) | |||
3050 | } | 3056 | } |
3051 | err: | 3057 | err: |
3052 | mutex_unlock(&adapter->mbox_lock); | 3058 | mutex_unlock(&adapter->mbox_lock); |
3053 | pci_free_consistent(adapter->pdev, cmd.size, | 3059 | if (cmd.va) |
3054 | cmd.va, cmd.dma); | 3060 | pci_free_consistent(adapter->pdev, cmd.size, cmd.va, cmd.dma); |
3055 | return status; | 3061 | return status; |
3056 | } | 3062 | } |
3057 | 3063 | ||