linux/drivers/scsi/megaraid
Kashyap Desai d0fc91d67c scsi: megaraid_sas: Send SYNCHRONIZE_CACHE for VD to firmware
Until now the megaraid_sas driver has reported successful completion on
SYNCHRONIZE_CACHE commands without sending them down to the controller.
The controller firmware has been responsible for taking care of flushing
disk caches for all drives that belong to a Virtual Disk at the time of
system reboot/shutdown.

There may have been a reason to avoid sending SYNCHRONIZE_CACHE to a VD
in the past but that no longer appears to be valid.

Older versions of MegaRaid firmware (Gen2 and Gen2.5) set the WCE bit
for Virtual Disks but the firmware does not report correct completion
status for a SYNCHRONIZE_CACHE command. As a result, we must use another
method to identify whether it is safe to send the command to the
controller. We use the canHandleSyncCache firmware flag in the scratch
pad register at offset 0xB4.

New SYNCHRONIZE_CACHE behavior:

IF 'JBOD'

	Driver sends SYNCHRONIZE_CACHE command to the firmware
	Firmware sends SYNCHRONIZE_CACHE to drive
	Firmware obtains status from drive and returns same status back to driver

ELSEIF 'VirtualDisk'

	IF firmware supports new API bit called canHandleSyncCache
		Driver sends SYNCHRONIZE_CACHE command to the firmware
		Firmware does not send SYNCHRONIZE_CACHE to drives
		Firmware returns SUCCESS
	ELSE
		Driver does not send SYNCHRONIZE_CACHE command to the firmware
		Driver return SUCCESS for that command
	ENDIF
ENDIF

[mkp: edited patch description]

Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
Reviewed-by: Tomas Henzl <thenzl@redhat.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
2016-11-08 17:39:35 -05:00
..
Kconfig.megaraid
Makefile
mbox_defs.h
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 megaraid: Fix possible NULL pointer deference in mraid_mm_ioctl 2016-01-08 13:03:53 -05:00
megaraid_mm.h
megaraid_sas_base.c scsi: megaraid_sas: Send SYNCHRONIZE_CACHE for VD to firmware 2016-11-08 17:39:35 -05:00
megaraid_sas_fp.c scsi: megaraid_sas: Send correct PhysArm to FW for R1 VD downgrade 2016-11-08 17:29:57 -05:00
megaraid_sas_fusion.c scsi: megaraid_sas: Send SYNCHRONIZE_CACHE for VD to firmware 2016-11-08 17:39:35 -05:00
megaraid_sas_fusion.h scsi: megaraid_sas: clean function declarations in megaraid_sas_base.c up 2016-09-19 11:59:32 -04:00
megaraid_sas.h scsi: megaraid_sas: Send SYNCHRONIZE_CACHE for VD to firmware 2016-11-08 17:39:35 -05:00