From: Johannes Thumshirn <jthumshirn@suse.de>
To: Weidong Wang <wangweidong1@huawei.com>,
kashyap.desai@avagotech.com, sumit.saxena@avagotech.com,
uday.lingala@avagotech.com, JBottomley@odin.com
Cc: megaraidlinux.pdl@avagotech.com, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 3/3] megaraid_sas: return -ENOMEM when create DMA pool for cmd frames failed
Date: Tue, 27 Oct 2015 11:17:06 +0100 [thread overview]
Message-ID: <1445941026.16404.35.camel@suse.de> (raw)
In-Reply-To: <1445934375-17784-4-git-send-email-wangweidong1@huawei.com>
On Tue, 2015-10-27 at 16:26 +0800, Weidong Wang wrote:
> when create DMA pool for cmd frames failed, we should return -ENOMEM,
> instead of 0.
> In some case in:
>
> megasas_init_adapter_fusion()
>
> -->megasas_alloc_cmds()
> -->megasas_create_frame_pool
> create DMA pool failed,
> --> megasas_free_cmds() [1]
>
> -->megasas_alloc_cmds_fusion()
> failed, then goto fail_alloc_cmds.
> -->megasas_free_cmds() [2]
>
> we will call megasas_free_cmds twice, [1] will kfree cmd_list,
> [2] will use cmd_list.it will cause a problem:
>
> Unable to handle kernel NULL pointer dereference at virtual address
> 00000000
> pgd = ffffffc000f70000
> [00000000] *pgd=0000001fbf893003, *pud=0000001fbf893003,
> *pmd=0000001fbf894003, *pte=006000006d000707
> Internal error: Oops: 96000005 [#1] SMP
> Modules linked in:
> CPU: 18 PID: 1 Comm: swapper/0 Not tainted
> task: ffffffdfb9290000 ti: ffffffdfb923c000 task.ti:
> ffffffdfb923c000
> PC is at megasas_free_cmds+0x30/0x70
> LR is at megasas_free_cmds+0x24/0x70
>
> ...
>
> Call trace:
> [<ffffffc0005b779c>] megasas_free_cmds+0x30/0x70
> [<ffffffc0005bca74>] megasas_init_adapter_fusion+0x2f4/0x4d8
> [<ffffffc0005b926c>] megasas_init_fw+0x2dc/0x760
> [<ffffffc0005b9ab0>] megasas_probe_one+0x3c0/0xcd8
> [<ffffffc0004a5abc>] local_pci_probe+0x4c/0xb4
> [<ffffffc0004a5c40>] pci_device_probe+0x11c/0x14c
> [<ffffffc00053a5e4>] driver_probe_device+0x1ec/0x430
> [<ffffffc00053a92c>] __driver_attach+0xa8/0xb0
> [<ffffffc000538178>] bus_for_each_dev+0x74/0xc8
> [<ffffffc000539e88>] driver_attach+0x28/0x34
> [<ffffffc000539a18>] bus_add_driver+0x16c/0x248
> [<ffffffc00053b234>] driver_register+0x6c/0x138
> [<ffffffc0004a5350>] __pci_register_driver+0x5c/0x6c
> [<ffffffc000ce3868>] megasas_init+0xc0/0x1a8
> [<ffffffc000082a58>] do_one_initcall+0xe8/0x1ec
> [<ffffffc000ca7be8>] kernel_init_freeable+0x1c8/0x284
> [<ffffffc0008d90b8>] kernel_init+0x1c/0xe4
>
> Signed-off-by: Weidong Wang <wangweidong1@huawei.com>
> ---
> drivers/scsi/megaraid/megaraid_sas_base.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c
> b/drivers/scsi/megaraid/megaraid_sas_base.c
> index 2287aa1..8215218 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -3746,8 +3746,9 @@ int megasas_alloc_cmds(struct megasas_instance
> *instance)
> * Create a frame pool and assign one frame to each cmd
> */
> if (megasas_create_frame_pool(instance)) {
> - dev_dbg(&instance->pdev->dev, "Error creating frame
> DMA pool\n");
> + dev_err(&instance->pdev->dev, "Error creating frame
> DMA pool\n");
> megasas_free_cmds(instance);
> + return -ENOMEM;
> }
>
> return 0;
I think this is needed for stable as well.
Other than that,
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Thanks,
Johannes
prev parent reply other threads:[~2015-10-27 10:17 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-27 8:26 [PATCH 0/3] megaraid_sas: copule of fixes Weidong Wang
2015-10-27 8:26 ` Weidong Wang
2015-10-27 8:26 ` [PATCH 1/3] megaraid_sas: Convert dev_printk to dev_<level> Weidong Wang
2015-10-27 8:26 ` Weidong Wang
2015-10-27 10:25 ` Johannes Thumshirn
2015-10-27 10:33 ` Kashyap Desai
2015-10-28 2:31 ` Weidong Wang
2015-10-28 2:31 ` Weidong Wang
2015-10-27 19:35 ` Joe Perches
2015-10-28 1:59 ` Weidong Wang
2015-10-28 1:59 ` Weidong Wang
2015-10-27 8:26 ` [PATCH 2/3] megaraid_sas: Convert printk to printk_<level> Weidong Wang
2015-10-27 8:26 ` Weidong Wang
2015-10-27 10:25 ` Johannes Thumshirn
2015-10-27 19:32 ` Joe Perches
2015-10-27 8:26 ` [PATCH 3/3] megaraid_sas: return -ENOMEM when create DMA pool for cmd frames failed Weidong Wang
2015-10-27 8:26 ` Weidong Wang
2015-10-27 10:17 ` Johannes Thumshirn [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1445941026.16404.35.camel@suse.de \
--to=jthumshirn@suse.de \
--cc=JBottomley@odin.com \
--cc=kashyap.desai@avagotech.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=megaraidlinux.pdl@avagotech.com \
--cc=sumit.saxena@avagotech.com \
--cc=uday.lingala@avagotech.com \
--cc=wangweidong1@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.