[SCSI] aacraid: apply commit config for reset_devices flag
Under some conditions associated with the unclean transition to kdump, the aacraid adapters will view the array as foreign and not export it to prevent access and data manipulation. The solution is to submit a commit configuration to export the devices since this is a expected behavior when transitioning to a kdump kernel. This patch adds the aacraid.reset_devices flag and when either this or the global reset_devices flag is set, ensures that a commit config is issued and extends the startup_timeout if it is set less than 5 minutes. Signed-off-by: Mark Salyzyn <aacraid@adaptec.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
09ff92fea2
commit
1208bab5d0
|
@ -146,7 +146,7 @@ static char *aac_get_status_string(u32 status);
|
|||
static int nondasd = -1;
|
||||
static int dacmode = -1;
|
||||
|
||||
static int commit = -1;
|
||||
int aac_commit = -1;
|
||||
int startup_timeout = 180;
|
||||
int aif_timeout = 120;
|
||||
|
||||
|
@ -154,7 +154,7 @@ module_param(nondasd, int, S_IRUGO|S_IWUSR);
|
|||
MODULE_PARM_DESC(nondasd, "Control scanning of hba for nondasd devices. 0=off, 1=on");
|
||||
module_param(dacmode, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(dacmode, "Control whether dma addressing is using 64 bit DAC. 0=off, 1=on");
|
||||
module_param(commit, int, S_IRUGO|S_IWUSR);
|
||||
module_param_named(commit, aac_commit, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(commit, "Control whether a COMMIT_CONFIG is issued to the adapter for foreign arrays.\nThis is typically needed in systems that do not have a BIOS. 0=off, 1=on");
|
||||
module_param(startup_timeout, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(startup_timeout, "The duration of time in seconds to wait for adapter to have it's kernel up and\nrunning. This is typically adjusted for large systems that do not have a BIOS.");
|
||||
|
@ -173,6 +173,9 @@ int expose_physicals = -1;
|
|||
module_param(expose_physicals, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(expose_physicals, "Expose physical components of the arrays. -1=protect 0=off, 1=on");
|
||||
|
||||
int aac_reset_devices = 0;
|
||||
module_param_named(reset_devices, aac_reset_devices, int, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(reset_devices, "Force an adapter reset at initialization.");
|
||||
|
||||
static inline int aac_valid_context(struct scsi_cmnd *scsicmd,
|
||||
struct fib *fibptr) {
|
||||
|
@ -246,7 +249,7 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag)
|
|||
aac_fib_complete(fibptr);
|
||||
/* Send a CT_COMMIT_CONFIG to enable discovery of devices */
|
||||
if (status >= 0) {
|
||||
if ((commit == 1) || commit_flag) {
|
||||
if ((aac_commit == 1) || commit_flag) {
|
||||
struct aac_commit_config * dinfo;
|
||||
aac_fib_init(fibptr);
|
||||
dinfo = (struct aac_commit_config *) fib_data(fibptr);
|
||||
|
@ -261,7 +264,7 @@ int aac_get_config_status(struct aac_dev *dev, int commit_flag)
|
|||
1, 1,
|
||||
NULL, NULL);
|
||||
aac_fib_complete(fibptr);
|
||||
} else if (commit == 0) {
|
||||
} else if (aac_commit == 0) {
|
||||
printk(KERN_WARNING
|
||||
"aac_get_config_status: Foreign device configurations are being ignored\n");
|
||||
}
|
||||
|
|
|
@ -1830,3 +1830,5 @@ extern char aac_driver_version[];
|
|||
extern int startup_timeout;
|
||||
extern int aif_timeout;
|
||||
extern int expose_physicals;
|
||||
extern int aac_reset_devices;
|
||||
extern int aac_commit;
|
||||
|
|
|
@ -488,6 +488,8 @@ static int aac_rx_restart_adapter(struct aac_dev *dev, int bled)
|
|||
return -EINVAL;
|
||||
if (rx_readl(dev, MUnit.OMRx[0]) & KERNEL_PANIC)
|
||||
return -ENODEV;
|
||||
if (startup_timeout < 300)
|
||||
startup_timeout = 300;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -542,7 +544,7 @@ int _aac_rx_init(struct aac_dev *dev)
|
|||
dev->a_ops.adapter_sync_cmd = rx_sync_cmd;
|
||||
dev->a_ops.adapter_enable_int = aac_rx_disable_interrupt;
|
||||
dev->OIMR = status = rx_readb (dev, MUnit.OIMR);
|
||||
if ((((status & 0x0c) != 0x0c) || reset_devices) &&
|
||||
if ((((status & 0x0c) != 0x0c) || aac_reset_devices || reset_devices) &&
|
||||
!aac_rx_restart_adapter(dev, 0))
|
||||
++restart;
|
||||
/*
|
||||
|
@ -594,6 +596,8 @@ int _aac_rx_init(struct aac_dev *dev)
|
|||
}
|
||||
msleep(1);
|
||||
}
|
||||
if (restart)
|
||||
aac_commit = 1;
|
||||
/*
|
||||
* Fill in the common function dispatch table.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue