Print this page
Bad assertions
nfs_export_zone_init() can't assume called in zone-context.
curzone reality check and teardown changes to use the RIGHT zone

*** 690,703 **** --- 690,711 ---- */ exportinfo_t * vis2exi(treenode_t *tnode) { exportinfo_t *exi_ret = NULL; + #ifdef DEBUG + zone_t *zone = NULL; + #endif for (;;) { tnode = tnode->tree_parent; + #ifdef DEBUG + if (zone == NULL && tnode->tree_exi != NULL) + zone = tnode->tree_exi->exi_zone; + #endif if (TREE_ROOT(tnode)) { + ASSERT3P(zone, ==, tnode->tree_exi->exi_zone); exi_ret = tnode->tree_exi; break; } }
*** 873,883 **** ne->exi_root->exi_export.ex_path[1] = '\0'; ne->exi_root->exi_count = 1; mutex_init(&ne->exi_root->exi_lock, NULL, MUTEX_DEFAULT, NULL); ! ne->exi_root->exi_vp = ZONE_ROOTVP(); ne->exi_rootfid.fid_len = MAXFIDSZ; if (vop_fid_pseudo(ne->exi_root->exi_vp, &ne->exi_rootfid) != 0) { mutex_destroy(&ne->exi_root->exi_lock); kmem_free(ne->exi_root->exi_export.ex_path, ne->exi_root->exi_export.ex_pathlen + 1); --- 881,892 ---- ne->exi_root->exi_export.ex_path[1] = '\0'; ne->exi_root->exi_count = 1; mutex_init(&ne->exi_root->exi_lock, NULL, MUTEX_DEFAULT, NULL); ! ne->exi_root->exi_zone = zone_find_by_id_nolock(zoneid); ! ne->exi_root->exi_vp = ne->exi_root->exi_zone->zone_rootvp; ne->exi_rootfid.fid_len = MAXFIDSZ; if (vop_fid_pseudo(ne->exi_root->exi_vp, &ne->exi_rootfid) != 0) { mutex_destroy(&ne->exi_root->exi_lock); kmem_free(ne->exi_root->exi_export.ex_path, ne->exi_root->exi_export.ex_pathlen + 1);
*** 1298,1308 **** exi = kmem_zalloc(sizeof (*exi), KM_SLEEP); exi->exi_fsid = fsid; exi->exi_fid = fid; exi->exi_vp = vp; exi->exi_count = 1; ! exi->exi_zoneid = crgetzoneid(cr); exi->exi_volatile_dev = (vfssw[vp->v_vfsp->vfs_fstype].vsw_flag & VSW_VOLATILEDEV) ? 1 : 0; mutex_init(&exi->exi_lock, NULL, MUTEX_DEFAULT, NULL); exi->exi_dvp = dvp; --- 1307,1319 ---- exi = kmem_zalloc(sizeof (*exi), KM_SLEEP); exi->exi_fsid = fsid; exi->exi_fid = fid; exi->exi_vp = vp; exi->exi_count = 1; ! exi->exi_zone = crgetzone(cr); ! ASSERT(exi->exi_zone != NULL); /* XXX KEBE ASKS... */ ! ASSERT3P(exi->exi_zone, ==, curzone); /* ... are these legit? */ exi->exi_volatile_dev = (vfssw[vp->v_vfsp->vfs_fstype].vsw_flag & VSW_VOLATILEDEV) ? 1 : 0; mutex_init(&exi->exi_lock, NULL, MUTEX_DEFAULT, NULL); exi->exi_dvp = dvp;
*** 1812,1821 **** --- 1823,1833 ---- newexi = pseudo_exportfs(ne, exi->exi_vp, &exi->exi_fid, exi->exi_visible, &exi->exi_export); exi->exi_visible = NULL; /* interconnect the existing treenode with the new exportinfo */ + newexi->exi_zone = exi->exi_zone; newexi->exi_tree = exi->exi_tree; newexi->exi_tree->tree_exi = newexi; /* Update the change timestamp */ tree_update_change(ne, exi->exi_tree, NULL);
*** 1841,1850 **** --- 1853,1867 ---- /* * If this was a public export, restore * the public filehandle to the root. */ + + /* + * XXX KEBE ASKS --> Should CRED() instead be + * exi->exi_zone->zone_kcred? + */ if (exi == ne->exi_public) { ne->exi_public = ne->exi_root; nfslog_share_record(ne->exi_public, CRED()); }