Print this page
Do rfs4_ss_fini() BEFORE rfs4_servinst_destroy_all().
*** 1494,1503 ****
--- 1494,1511 ----
nfs4_srv_t *nsrv4;
nsrv4 = zone_getspecific(rfs4_zone_key, curzone);
rfs4_set_deleg_policy(nsrv4, SRV_NEVER_DELEGATE);
+ /*
+ * Clean up any dangling stable storage structures BEFORE calling
+ * rfs4_servinst_destroy_all() so there are no dangling structures
+ * (i.e. the srvinsts are all cleared of danglers BEFORE they get
+ * freed).
+ */
+ rfs4_ss_fini(nsrv4);
+
mutex_enter(&nsrv4->state_lock);
if (nsrv4->nfs4_server_state == NULL) {
mutex_exit(&nsrv4->state_lock);
return;
*** 1534,1546 ****
nsrv4->rfs4_lockowner_cache_time = 0;
nsrv4->rfs4_file_cache_time = 0;
nsrv4->rfs4_deleg_state_cache_time = 0;
mutex_exit(&nsrv4->state_lock);
-
- /* clean up any dangling stable storage structures */
- rfs4_ss_fini(nsrv4);
}
typedef union {
struct {
uint32_t start_time;
--- 1542,1551 ----