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 ----