linux/drivers/scsi/megaraid
Sumit.Saxena@avagotech.com 2be2a98845 megaraid_sas : Modify return value of megasas_issue_blocked_cmd() and wait_and_poll() to consider command status returned by firmware
This patch is rebased on top of recently sent 18 patches(submitted by me) for
megaraid_sas driver.

Change the return value of wait_and_poll() and megsas_issue_blocked_cmd()
based on MFI_STAT returned by firmware for that command. Earlier driver always
send return type based on command completion (but never check MFI_STAT_OK for
that command), so even if command is failed by firmware still driver will
return SUCCESS status from these functions wait_and_poll() and
megsas_issue_blocked_cmd() and if caller of these functions does not check
command status (MFI_STAT), then it may endup using invalid data returned in
DMA buffers(one of the example is megasas_ld_list_query DCMD). Best thing to
avoid this type of issue is do error handling and set proper return type from
caller function wait_and_poll() and megsas_issue_blocked_cmd().

The change proposed in this patch will fix the regression introduced in patch-
"90dc9d9 megaraid_sas : MFI MPT linked list corruption fix" inside function
megasas_ld_list_query().  Prior to this MFI MPT linked list corruption fix
patch, megasas_ld_list_query() function used to check DCMD status(returned by
firmware) but with this linked list corruption fix patch, DCMD status will not
be checked inside function megasas_ld_list_query() and introduced this issue
of wrong data being used by function megasas_ld_list_query().

Cc: <stable@vger.kernel.org>
Signed-off-by: Kashyap Desai <kashyap.desai@avagotech.com>
Signed-off-by: Sumit Saxena <sumit.saxena@avagotech.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Odin.com>
2015-06-01 07:32:42 -07:00
..
Kconfig.megaraid
Makefile [SCSI] megaraid_sas: Add 9565/9285 specific code 2010-12-22 23:26:53 -06:00
mbox_defs.h Fix common misspellings 2011-03-31 11:26:23 -03:00
mega_common.h scsi: use 64-bit LUNs 2014-07-17 22:07:37 +02:00
megaraid_ioctl.h
megaraid_mbox.c scsi: drop reason argument from ->change_queue_depth 2014-11-24 14:45:27 +01:00
megaraid_mbox.h
megaraid_mm.c [SCSI] megaraid: missing bounds check in mimd_to_kioc() 2014-03-15 10:19:00 -07:00
megaraid_mm.h
megaraid_sas_base.c megaraid_sas : Modify return value of megasas_issue_blocked_cmd() and wait_and_poll() to consider command status returned by firmware 2015-06-01 07:32:42 -07:00
megaraid_sas_fp.c megaraid_sas : add endianness conversions for all ones 2015-05-25 08:46:30 -07:00
megaraid_sas_fusion.c megaraid_sas : Modify return value of megasas_issue_blocked_cmd() and wait_and_poll() to consider command status returned by firmware 2015-06-01 07:32:42 -07:00
megaraid_sas_fusion.h megaraid_sas : add endianness annotations 2015-05-25 08:46:30 -07:00
megaraid_sas.h megaraid_sas : Modify return value of megasas_issue_blocked_cmd() and wait_and_poll() to consider command status returned by firmware 2015-06-01 07:32:42 -07:00