Bug#688198: megasas: Failed to alloc kernel SGL buffer for IOCTL - Possible regression from 2.6.32.41~3
FWIW - I don't experience the problem/message on a Debian Squeeze box running Linux deb003.pod01 2.6.32-5-xen-amd64 #1 SMP Mon Jan 16 20:48:30 UTC 2012 x86_64 GNU/Linux
I'm not currently able to re-compile my 3.2 ubuntu 12.04 kernel, but will try to find a comparable system to do it on.
On Nov 20, 2012, at 11:20 PM, Bjørn Mork wrote:
> 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: