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);
}