[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#688198: megasas: Failed to alloc kernel SGL buffer for IOCTL - Possible regression from 2.6.32.41~3



Todd Fleisher <todd@fleetstreetops.com> writes:

> I get this periodically (seemingly random - but usually once it starts happening it sticks around for a while, then disappears only to return later) when I'm using LSI's MegaCli64 utility. When the kernel logs the error the MegaCli64 command doesn't return any data either.
>
> Ex:
> root@deb015.pod02:~# MegaCli64 -PDList -aALL
>
>
> Exit Code: 0x00
>
>
> Which is paired with a kernel message:
> Nov 20 20:29:50 deb015 kernel: [797020.797811] megasas: Failed to alloc kernel SGL buffer for IOCTL 
>
> Other times that same command (or other MegaCli64 commands) will succeed and return the associated data. When this happens, there is no megasas kernel message.


Thanks.  I don't know what the MegaCli64 utility does, but I assume it
use the driver specific ioctls to send passthrough commands like the
smartmontools do.  That is consistent with your description.

But I was concluding too fast as usual.  The bug I found needs to be
fixed, but it cannot be the cause of this problem.  If it were then you
would most likely see many other effects on your system.  And the same
bug has been backported to 2.6.32 as well.  And if if had not been, and
you are in fact hit by it, then your system would have crashed instead.

So that cannot be the problem.  And then I don't know what could have
changed between 2.6.32 and 3.2.  Could be something outside this driver.

It would be interesting to know something about the size of the buffers
which cannot be allocated.  But running with debug pacthes is maybe out
of the question? Otherwise you could try running with something like
this to get a better picture of why this is failing:


diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index f013432..1c0fa1d 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4797,6 +4797,7 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,
 		if (!kbuff_arr[i]) {
 			printk(KERN_DEBUG "megasas: Failed to alloc "
 			       "kernel SGL buffer for IOCTL \n");
+			printk(KERN_DEBUG "megasas: iov_len=%d\n", ioc->sgl[i].iov_len);
 			error = -ENOMEM;
 			goto out;
 		}




Bjørn


Reply to: