Print this page
Fix NFS design problems re. multiple zone keys
Make NFS server zone-specific data all have the same lifetime
Fix rfs4_clean_state_exi
Fix exi_cache_reclaim
Fix mistakes in zone keys work
More fixes re. exi_zoneid and exi_tree
(danmcd -> Keep some ASSERT()s around for readability.)

*** 158,168 **** } srv_deleg_policy_t nfs4_get_deleg_policy() { ! nfs4_srv_t *nsrv4 = zone_getspecific(rfs4_zone_key, curzone); return (nsrv4->nfs4_deleg_policy); } /* --- 158,168 ---- } srv_deleg_policy_t nfs4_get_deleg_policy() { ! nfs4_srv_t *nsrv4 = nfs4_get_srv(); return (nsrv4->nfs4_deleg_policy); } /*
*** 1268,1278 **** int no_delegation; ASSERT(rfs4_dbe_islocked(sp->rs_dbe)); ASSERT(rfs4_dbe_islocked(fp->rf_dbe)); ! nsrv4 = zone_getspecific(rfs4_zone_key, curzone); /* Is the server even providing delegations? */ if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE || dreq == DELEG_NONE) return (NULL); --- 1268,1278 ---- int no_delegation; ASSERT(rfs4_dbe_islocked(sp->rs_dbe)); ASSERT(rfs4_dbe_islocked(fp->rf_dbe)); ! nsrv4 = nfs4_get_srv(); /* Is the server even providing delegations? */ if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE || dreq == DELEG_NONE) return (NULL);
*** 1447,1457 **** rfs4_check_delegated_byfp(int mode, rfs4_file_t *fp, bool_t trunc, bool_t do_delay, bool_t is_rm, clientid4 *cp) { rfs4_deleg_state_t *dsp; ! nfs4_srv_t *nsrv4 = zone_getspecific(rfs4_zone_key, curzone); /* Is delegation enabled? */ if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE) return (FALSE); --- 1447,1457 ---- rfs4_check_delegated_byfp(int mode, rfs4_file_t *fp, bool_t trunc, bool_t do_delay, bool_t is_rm, clientid4 *cp) { rfs4_deleg_state_t *dsp; ! nfs4_srv_t *nsrv4 = nfs4_get_srv(); /* Is delegation enabled? */ if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE) return (FALSE);
*** 1520,1530 **** nfs4_srv_t *nsrv4; rfs4_file_t *fp; bool_t create = FALSE; bool_t rc = FALSE; ! nsrv4 = zone_getspecific(rfs4_zone_key, curzone); rfs4_hold_deleg_policy(nsrv4); /* Is delegation enabled? */ if (nsrv4->nfs4_deleg_policy != SRV_NEVER_DELEGATE) { fp = rfs4_findfile(vp, NULL, &create); --- 1520,1530 ---- nfs4_srv_t *nsrv4; rfs4_file_t *fp; bool_t create = FALSE; bool_t rc = FALSE; ! nsrv4 = nfs4_get_srv(); rfs4_hold_deleg_policy(nsrv4); /* Is delegation enabled? */ if (nsrv4->nfs4_deleg_policy != SRV_NEVER_DELEGATE) { fp = rfs4_findfile(vp, NULL, &create);
*** 1546,1556 **** * or a rename is in progress. */ void rfs4_clear_dont_grant(rfs4_file_t *fp) { ! nfs4_srv_t *nsrv4 = zone_getspecific(rfs4_zone_key, curzone); if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE) return; rfs4_dbe_lock(fp->rf_dbe); ASSERT(fp->rf_dinfo.rd_hold_grant > 0); --- 1546,1556 ---- * or a rename is in progress. */ void rfs4_clear_dont_grant(rfs4_file_t *fp) { ! nfs4_srv_t *nsrv4 = nfs4_get_srv(); if (nsrv4->nfs4_deleg_policy == SRV_NEVER_DELEGATE) return; rfs4_dbe_lock(fp->rf_dbe); ASSERT(fp->rf_dinfo.rd_hold_grant > 0);
*** 1886,1896 **** void rfs4_disable_delegation(void) { nfs4_srv_t *nsrv4; ! nsrv4 = zone_getspecific(rfs4_zone_key, curzone); mutex_enter(&nsrv4->deleg_lock); rfs4_deleg_disabled++; mutex_exit(&nsrv4->deleg_lock); } --- 1886,1896 ---- void rfs4_disable_delegation(void) { nfs4_srv_t *nsrv4; ! nsrv4 = nfs4_get_srv(); mutex_enter(&nsrv4->deleg_lock); rfs4_deleg_disabled++; mutex_exit(&nsrv4->deleg_lock); }
*** 1897,1907 **** void rfs4_enable_delegation(void) { nfs4_srv_t *nsrv4; ! nsrv4 = zone_getspecific(rfs4_zone_key, curzone); mutex_enter(&nsrv4->deleg_lock); ASSERT(rfs4_deleg_disabled > 0); rfs4_deleg_disabled--; mutex_exit(&nsrv4->deleg_lock); } --- 1897,1907 ---- void rfs4_enable_delegation(void) { nfs4_srv_t *nsrv4; ! nsrv4 = nfs4_get_srv(); mutex_enter(&nsrv4->deleg_lock); ASSERT(rfs4_deleg_disabled > 0); rfs4_deleg_disabled--; mutex_exit(&nsrv4->deleg_lock); }