On Tue, 19 Feb 2008, James Bottomley wrote:
On Tue, 2008-02-19 at 15:34 -0800, akpm@xxxxxxxxxxxxxxxxxxxx wrote:
Subject: mpt fusion: don't oops if NumPhys==0
From: Krzysztof Oledzki <olel@xxxxxx>
Don't oops if NumPhys==0, instead return -ENODEV.
This patch fixes http://bugzilla.kernel.org/show_bug.cgi?id=9909
Signed-off-by: Krzysztof Piotr Oledzki <ole@xxxxxx>
Cc: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx>
Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>
Cc: Eric Moore <Eric.Moore@xxxxxxx>
Cc: Sathya Prakash <sathya.prakash@xxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---
drivers/message/fusion/mptsas.c | 5 +++++
1 file changed, 5 insertions(+)
diff -puN drivers/message/fusion/mptsas.c~mpt-fusion-dont-oops-if-numphys==0 drivers/message/fusion/mptsas.c
--- a/drivers/message/fusion/mptsas.c~mpt-fusion-dont-oops-if-numphys==0
+++ a/drivers/message/fusion/mptsas.c
@@ -1701,6 +1701,11 @@ mptsas_sas_expander_pg0(MPT_ADAPTER *ioc
if (error)
goto out_free_consistent;
+ if (!buffer->NumPhys) {
+ error = -ENODEV;
+ goto out_free_consistent;
+ }
+
/* save config data */
port_info->num_phys = buffer->NumPhys;
port_info->phy_info = kcalloc(port_info->num_phys,
_
This is a bit odd ... It looks like a work around for a fusion firmware
problem.
Workaround or not, the driver should not oops by allocating 0 size memory
block and dereferencing it. It used to work in <2.6.23 but not now.
What's the topology this thing is connected to?
It is a Dell-1950III server with two 400GB SAS disks (RAID1) installed in
a dwo disk SAS backplane.
Best regrds,
Krzysztof Olędzki