Print this page
curzone reality check and teardown changes to use the RIGHT zone

*** 479,489 **** */ #define TREE_ROOT(t) \ ((t)->tree_exi != NULL && \ (((t)->tree_exi->exi_vp->v_flag & VROOT) || \ ! VN_IS_CURZONEROOT((t)->tree_exi->exi_vp))) #define TREE_EXPORTED(t) \ ((t)->tree_exi && !PSEUDO((t)->tree_exi)) #define EXPTABLESIZE 256 --- 479,489 ---- */ #define TREE_ROOT(t) \ ((t)->tree_exi != NULL && \ (((t)->tree_exi->exi_vp->v_flag & VROOT) || \ ! VN_CMP((t)->tree_exi->exi_zone->zone_rootvp, (t)->tree_exi->exi_vp))) #define TREE_EXPORTED(t) \ ((t)->tree_exi && !PSEUDO((t)->tree_exi)) #define EXPTABLESIZE 256
*** 531,547 **** struct charset_cache *exi_charset; unsigned exi_volatile_dev:1; unsigned exi_moved:1; int exi_id; avl_node_t exi_id_link; ! zoneid_t exi_zoneid; #ifdef VOLATILE_FH_TEST uint32_t exi_volatile_id; struct ex_vol_rename *exi_vol_rename; kmutex_t exi_vol_rename_lock; #endif /* VOLATILE_FH_TEST */ }; typedef struct exportinfo exportinfo_t; typedef struct exportdata exportdata_t; typedef struct secinfo secinfo_t; --- 531,561 ---- struct charset_cache *exi_charset; unsigned exi_volatile_dev:1; unsigned exi_moved:1; int exi_id; avl_node_t exi_id_link; ! /* ! * Soft-reference/backpointer to the zone. The ZSD callbacks we have ! * invoke cleanup code that crosses into OTHER cleanup functions that ! * may assume same-zone context and attempt to find their own ZSD, ! * using "curzone" when in fact "curzone" is global when called from ! * NFS's ZSD cleanup (see lm_unexport->nlm_unexport for an example). ! * ! * During ZSD shutdown or destroy callbacks, the zone structure ! * does not have its mutex held, and it has just-enough references ! * to not free from underneath us. This field is not a proper ! * referenced-held zone pointer, and only ZSD callbacks should use ! * it. ! */ ! struct zone *exi_zone; #ifdef VOLATILE_FH_TEST uint32_t exi_volatile_id; struct ex_vol_rename *exi_vol_rename; kmutex_t exi_vol_rename_lock; #endif /* VOLATILE_FH_TEST */ }; + #define exi_zoneid exi_zone->zone_id typedef struct exportinfo exportinfo_t; typedef struct exportdata exportdata_t; typedef struct secinfo secinfo_t;