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>
*** 16,43 ****
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014 Nexenta Systems Inc. All rights reserved.
*/
/*
* Multipath driver interface (MDI) implementation; see mdi_impldefs.h for a
* more detailed discussion of the overall mpxio architecture.
- *
- * Default locking order:
- *
- * _NOTE(LOCK_ORDER(mdi_mutex, mdi_vhci:vh_phci_mutex);
- * _NOTE(LOCK_ORDER(mdi_mutex, mdi_vhci:vh_client_mutex);
- * _NOTE(LOCK_ORDER(mdi_vhci:vh_phci_mutex, mdi_phci::ph_mutex);
- * _NOTE(LOCK_ORDER(mdi_vhci:vh_client_mutex, mdi_client::ct_mutex);
- * _NOTE(LOCK_ORDER(mdi_phci::ph_mutex mdi_pathinfo::pi_mutex))
- * _NOTE(LOCK_ORDER(mdi_phci::ph_mutex mdi_client::ct_mutex))
- * _NOTE(LOCK_ORDER(mdi_client::ct_mutex mdi_pathinfo::pi_mutex))
*/
#include <sys/note.h>
#include <sys/types.h>
#include <sys/varargs.h>
--- 16,34 ----
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
+
/*
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014 Nexenta Systems Inc. All rights reserved.
*/
/*
* Multipath driver interface (MDI) implementation; see mdi_impldefs.h for a
* more detailed discussion of the overall mpxio architecture.
*/
#include <sys/note.h>
#include <sys/types.h>
#include <sys/varargs.h>
*** 3668,3698 ****
case MDI_CLIENT_STATE_FAILED:
/*
* This is the last path case for
* non-user initiated events.
*/
! if (((flag & NDI_USER_REQ) == 0) &&
! cdip && (i_ddi_node_state(cdip) >=
! DS_INITIALIZED)) {
MDI_CLIENT_UNLOCK(ct);
! rv = ndi_devi_offline(cdip,
! NDI_DEVFS_CLEAN);
MDI_CLIENT_LOCK(ct);
if (rv != NDI_SUCCESS) {
/*
! * ndi_devi_offline failed.
! * Reset client flags to
! * online as the path could not
! * be offlined.
*/
MDI_DEBUG(1, (MDI_WARN, cdip,
! "!ndi_devi_offline failed: "
! "error %x", rv));
MDI_CLIENT_SET_ONLINE(ct);
}
- }
break;
}
/*
* Convert to MDI error code
*/
--- 3659,3687 ----
case MDI_CLIENT_STATE_FAILED:
/*
* This is the last path case for
* non-user initiated events.
*/
! if ((flag & NDI_USER_REQ) ||
! cdip == NULL || i_ddi_node_state(cdip) <
! DS_INITIALIZED)
! break;
!
MDI_CLIENT_UNLOCK(ct);
! rv = ndi_devi_offline(cdip, NDI_DEVFS_CLEAN);
MDI_CLIENT_LOCK(ct);
if (rv != NDI_SUCCESS) {
/*
! * Reset client flags to online as the
! * path could not be offlined.
*/
MDI_DEBUG(1, (MDI_WARN, cdip,
! "!ndi_devi_offline failed: %d",
! rv));
MDI_CLIENT_SET_ONLINE(ct);
}
break;
}
/*
* Convert to MDI error code
*/