[SCSI] mptspi: reset handler shouldn't be called for other bus protocols

All registered reset callback handlers are called during reset processing.
The mptspi modules has its own reset callback handler, just recently
added for issuing domain validation after host reset. If either the mptsas or
mptfc driver are loaded, this callback could be called. Thus resulting
in domain validation being issued for sas or fibre end devices.

Fix this by having mptbase.c check the bus type against the driver
type and only call the reset handler if they match (or if it's a
non-bus specific reset handler).

Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>

authored by James Bottomley and committed by James Bottomley 4ff42a66 c3d83368

+21 -6
+21 -6
drivers/message/fusion/mptbase.c
··· 1605 } 1606 #endif 1607 1608 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 1609 /* 1610 * mpt_do_ioc_recovery - Initialize or recover MPT adapter. ··· 1900 if ((ret == 0) && MptResetHandlers[ii]) { 1901 dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n", 1902 ioc->name, ii)); 1903 - rc += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_POST_RESET); 1904 handlers++; 1905 } 1906 1907 if (alt_ioc_ready && MptResetHandlers[ii]) { 1908 drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", 1909 ioc->name, ioc->alt_ioc->name, ii)); 1910 - rc += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_POST_RESET); 1911 handlers++; 1912 } 1913 } ··· 3282 if (MptResetHandlers[ii]) { 3283 dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n", 3284 ioc->name, ii)); 3285 - r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_PRE_RESET); 3286 if (ioc->alt_ioc) { 3287 dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n", 3288 ioc->name, ioc->alt_ioc->name, ii)); 3289 - r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_PRE_RESET); 3290 } 3291 } 3292 } ··· 5721 if (MptResetHandlers[ii]) { 5722 dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n", 5723 ioc->name, ii)); 5724 - r += (*(MptResetHandlers[ii]))(ioc, MPT_IOC_SETUP_RESET); 5725 if (ioc->alt_ioc) { 5726 dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n", 5727 ioc->name, ioc->alt_ioc->name, ii)); 5728 - r += (*(MptResetHandlers[ii]))(ioc->alt_ioc, MPT_IOC_SETUP_RESET); 5729 } 5730 } 5731 }
··· 1605 } 1606 #endif 1607 1608 + static int 1609 + mpt_signal_reset(int index, MPT_ADAPTER *ioc, int reset_phase) 1610 + { 1611 + if ((MptDriverClass[index] == MPTSPI_DRIVER && 1612 + ioc->bus_type != SPI) || 1613 + (MptDriverClass[index] == MPTFC_DRIVER && 1614 + ioc->bus_type != FC) || 1615 + (MptDriverClass[index] == MPTSAS_DRIVER && 1616 + ioc->bus_type != SAS)) 1617 + /* make sure we only call the relevant reset handler 1618 + * for the bus */ 1619 + return 0; 1620 + return (MptResetHandlers[index])(ioc, reset_phase); 1621 + } 1622 + 1623 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ 1624 /* 1625 * mpt_do_ioc_recovery - Initialize or recover MPT adapter. ··· 1885 if ((ret == 0) && MptResetHandlers[ii]) { 1886 dprintk((MYIOC_s_INFO_FMT "Calling IOC post_reset handler #%d\n", 1887 ioc->name, ii)); 1888 + rc += mpt_signal_reset(ii, ioc, MPT_IOC_POST_RESET); 1889 handlers++; 1890 } 1891 1892 if (alt_ioc_ready && MptResetHandlers[ii]) { 1893 drsprintk((MYIOC_s_INFO_FMT "Calling alt-%s post_reset handler #%d\n", 1894 ioc->name, ioc->alt_ioc->name, ii)); 1895 + rc += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_POST_RESET); 1896 handlers++; 1897 } 1898 } ··· 3267 if (MptResetHandlers[ii]) { 3268 dprintk((MYIOC_s_INFO_FMT "Calling IOC pre_reset handler #%d\n", 3269 ioc->name, ii)); 3270 + r += mpt_signal_reset(ii, ioc, MPT_IOC_PRE_RESET); 3271 if (ioc->alt_ioc) { 3272 dprintk((MYIOC_s_INFO_FMT "Calling alt-%s pre_reset handler #%d\n", 3273 ioc->name, ioc->alt_ioc->name, ii)); 3274 + r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_PRE_RESET); 3275 } 3276 } 3277 } ··· 5706 if (MptResetHandlers[ii]) { 5707 dtmprintk((MYIOC_s_INFO_FMT "Calling IOC reset_setup handler #%d\n", 5708 ioc->name, ii)); 5709 + r += mpt_signal_reset(ii, ioc, MPT_IOC_SETUP_RESET); 5710 if (ioc->alt_ioc) { 5711 dtmprintk((MYIOC_s_INFO_FMT "Calling alt-%s setup reset handler #%d\n", 5712 ioc->name, ioc->alt_ioc->name, ii)); 5713 + r += mpt_signal_reset(ii, ioc->alt_ioc, MPT_IOC_SETUP_RESET); 5714 } 5715 } 5716 }