Print this page
9702 HBA drivers don't need the redundant devfs_clean step
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
@@ -100,12 +100,10 @@
#include <sys/scsi/adapters/mpt_sas/mptsas_ioctl.h>
#include <sys/scsi/adapters/mpt_sas/mptsas_smhba.h>
#include <sys/scsi/adapters/mpt_sas/mptsas_hash.h>
#include <sys/raidioctl.h>
-#include <sys/fs/dv_node.h> /* devfs_clean */
-
/*
* FMA header files
*/
#include <sys/ddifm.h>
#include <sys/fm/protocol.h>
@@ -395,17 +393,15 @@
char *guid, dev_info_t **dip, mdi_pathinfo_t **pip, mptsas_target_t *ptgt,
int lun);
static void mptsas_offline_missed_luns(dev_info_t *pdip,
uint16_t *repluns, int lun_cnt, mptsas_target_t *ptgt);
-static int mptsas_offline_lun(dev_info_t *pdip, dev_info_t *rdip,
- mdi_pathinfo_t *rpip, uint_t flags);
+static int mptsas_offline_lun(dev_info_t *rdip, mdi_pathinfo_t *rpip);
static int mptsas_config_smp(dev_info_t *pdip, uint64_t sas_wwn,
dev_info_t **smp_dip);
-static int mptsas_offline_smp(dev_info_t *pdip, mptsas_smp_t *smp_node,
- uint_t flags);
+static int mptsas_offline_smp(dev_info_t *pdip, mptsas_smp_t *smp_node);
static int mptsas_event_query(mptsas_t *mpt, mptsas_event_query_t *data,
int mode, int *rval);
static int mptsas_event_enable(mptsas_t *mpt, mptsas_event_enable_t *data,
int mode, int *rval);
@@ -6889,11 +6885,11 @@
* successfully.
*/
mutex_exit(&mpt->m_mutex);
ndi_devi_enter(parent, &circ1);
- rval = mptsas_offline_smp(parent, psmp, NDI_DEVI_REMOVE);
+ rval = mptsas_offline_smp(parent, psmp);
ndi_devi_exit(parent, circ1);
dev_info = psmp->m_deviceinfo;
if ((dev_info & DEVINFO_DIRECT_ATTACHED) ==
DEVINFO_DIRECT_ATTACHED) {
@@ -14691,12 +14687,11 @@
}
if (find == 0) {
/*
* The lun has not been there already
*/
- (void) mptsas_offline_lun(pdip, savechild, NULL,
- NDI_DEVI_REMOVE);
+ (void) mptsas_offline_lun(savechild, NULL);
}
}
pip = mdi_get_next_client_path(pdip, NULL);
while (pip) {
@@ -14728,12 +14723,11 @@
if (find == 0) {
/*
* The lun has not been there already
*/
- (void) mptsas_offline_lun(pdip, NULL, savepip,
- NDI_DEVI_REMOVE);
+ (void) mptsas_offline_lun(NULL, savepip);
}
}
}
/*
@@ -15023,12 +15017,11 @@
if (strncmp(addr, name, s) != 0) {
continue;
}
- tmp_rval = mptsas_offline_lun(pdip, prechild, NULL,
- NDI_DEVI_REMOVE);
+ tmp_rval = mptsas_offline_lun(prechild, NULL);
if (tmp_rval != DDI_SUCCESS) {
rval = DDI_FAILURE;
if (ndi_prop_create_boolean(DDI_DEV_T_NONE,
prechild, MPTSAS_DEV_GONE) !=
DDI_PROP_SUCCESS) {
@@ -15056,12 +15049,11 @@
if (strncmp(addr, name, s) != 0) {
continue;
}
- (void) mptsas_offline_lun(pdip, NULL, savepip,
- NDI_DEVI_REMOVE);
+ (void) mptsas_offline_lun(NULL, savepip);
/*
* driver will not invoke mdi_pi_free, so path will not
* be freed forever, return DDI_FAILURE.
*/
rval = DDI_FAILURE;
@@ -15068,52 +15060,23 @@
}
return (rval);
}
static int
-mptsas_offline_lun(dev_info_t *pdip, dev_info_t *rdip,
- mdi_pathinfo_t *rpip, uint_t flags)
+mptsas_offline_lun(dev_info_t *rdip, mdi_pathinfo_t *rpip)
{
int rval = DDI_FAILURE;
- char *devname;
- dev_info_t *cdip, *parent;
if (rpip != NULL) {
- parent = scsi_vhci_dip;
- cdip = mdi_pi_get_client(rpip);
- } else if (rdip != NULL) {
- parent = pdip;
- cdip = rdip;
- } else {
- return (DDI_FAILURE);
- }
-
- /*
- * Make sure node is attached otherwise
- * it won't have related cache nodes to
- * clean up. i_ddi_devi_attached is
- * similiar to i_ddi_node_state(cdip) >=
- * DS_ATTACHED.
- */
- if (i_ddi_devi_attached(cdip)) {
-
- /* Get full devname */
- devname = kmem_alloc(MAXNAMELEN + 1, KM_SLEEP);
- (void) ddi_deviname(cdip, devname);
- /* Clean cache */
- (void) devfs_clean(parent, devname + 1,
- DV_CLEAN_FORCE);
- kmem_free(devname, MAXNAMELEN + 1);
- }
- if (rpip != NULL) {
if (MDI_PI_IS_OFFLINE(rpip)) {
rval = DDI_SUCCESS;
} else {
rval = mdi_pi_offline(rpip, 0);
}
- } else {
- rval = ndi_devi_offline(cdip, flags);
+ } else if (rdip != NULL) {
+ rval = ndi_devi_offline(rdip,
+ NDI_DEVFS_CLEAN | NDI_DEVI_REMOVE);
}
return (rval);
}
@@ -15141,44 +15104,24 @@
}
return (child);
}
static int
-mptsas_offline_smp(dev_info_t *pdip, mptsas_smp_t *smp_node, uint_t flags)
+mptsas_offline_smp(dev_info_t *pdip, mptsas_smp_t *smp_node)
{
int rval = DDI_FAILURE;
- char *devname;
char wwn_str[MPTSAS_WWN_STRLEN];
dev_info_t *cdip;
(void) sprintf(wwn_str, "%"PRIx64, smp_node->m_addr.mta_wwn);
cdip = mptsas_find_smp_child(pdip, wwn_str);
-
if (cdip == NULL)
return (DDI_SUCCESS);
- /*
- * Make sure node is attached otherwise
- * it won't have related cache nodes to
- * clean up. i_ddi_devi_attached is
- * similiar to i_ddi_node_state(cdip) >=
- * DS_ATTACHED.
- */
- if (i_ddi_devi_attached(cdip)) {
+ rval = ndi_devi_offline(cdip, NDI_DEVFS_CLEAN | NDI_DEVI_REMOVE);
- /* Get full devname */
- devname = kmem_alloc(MAXNAMELEN + 1, KM_SLEEP);
- (void) ddi_deviname(cdip, devname);
- /* Clean cache */
- (void) devfs_clean(pdip, devname + 1,
- DV_CLEAN_FORCE);
- kmem_free(devname, MAXNAMELEN + 1);
- }
-
- rval = ndi_devi_offline(cdip, flags);
-
return (rval);
}
static dev_info_t *
mptsas_find_child(dev_info_t *pdip, char *name)