diff options
author | Stephen M. Cameron <scameron@beardog.cce.hp.com> | 2014-02-18 13:57:42 -0600 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2014-03-15 10:19:09 -0700 |
commit | faff6ee05379ad1e27c6a77706f107734a00705e (patch) | |
tree | f9333f61489ea3050f9b507070c6ac74dc0b2e62 /drivers | |
parent | 23100dd96a870470c19dcd84a50b6c43c684d912 (diff) |
[SCSI] hpsa: only do device rescan for certain events
Do no rescan on every events -- way too many rescans are
triggered if we don't filter the events. Limit rescans
to be triggered by the following set of events:
* controller state change
* enclosure hot plug
* physical drive state change
* logical drive state change
* redundant controller state change
* accelerated io enabled/disabled
* accelerated io configuration change
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/hpsa.c | 2 | ||||
-rw-r--r-- | drivers/scsi/hpsa.h | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index cb8760f33ea..6e5dbbf58be 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -6419,7 +6419,7 @@ static void hpsa_ctlr_needs_rescan(struct ctlr_info *h) return; h->events = readl(&(h->cfgtable->event_notify)); - if (!h->events && !h->drv_req_rescan) + if (!(h->events & RESCAN_REQUIRED_EVENT_BITS) && !h->drv_req_rescan) return; /* diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h index fe813e9aa50..fe8d281afda 100644 --- a/drivers/scsi/hpsa.h +++ b/drivers/scsi/hpsa.h @@ -181,6 +181,22 @@ struct ctlr_info { #define HPSATMF_LOG_QRY_TSET (1 << 24) #define HPSATMF_LOG_QRY_ASYNC (1 << 25) u32 events; +#define CTLR_STATE_CHANGE_EVENT (1 << 0) +#define CTLR_ENCLOSURE_HOT_PLUG_EVENT (1 << 1) +#define CTLR_STATE_CHANGE_EVENT_PHYSICAL_DRV (1 << 4) +#define CTLR_STATE_CHANGE_EVENT_LOGICAL_DRV (1 << 5) +#define CTLR_STATE_CHANGE_EVENT_REDUNDANT_CNTRL (1 << 6) +#define CTLR_STATE_CHANGE_EVENT_AIO_ENABLED_DISABLED (1 << 30) +#define CTLR_STATE_CHANGE_EVENT_AIO_CONFIG_CHANGE (1 << 31) + +#define RESCAN_REQUIRED_EVENT_BITS \ + (CTLR_STATE_CHANGE_EVENT | \ + CTLR_ENCLOSURE_HOT_PLUG_EVENT | \ + CTLR_STATE_CHANGE_EVENT_PHYSICAL_DRV | \ + CTLR_STATE_CHANGE_EVENT_LOGICAL_DRV | \ + CTLR_STATE_CHANGE_EVENT_REDUNDANT_CNTRL | \ + CTLR_STATE_CHANGE_EVENT_AIO_ENABLED_DISABLED | \ + CTLR_STATE_CHANGE_EVENT_AIO_CONFIG_CHANGE) int acciopath_status; int drv_req_rescan; /* flag for driver to request rescan event */ }; |