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