Print this page
Try to remove assumption that zone's root vnode is marked VROOT

*** 1301,1319 **** vnode_t *stubvp = NULL, *vp; vp = sarg->cs->vp; sarg->mntdfid_set = FALSE; ! /* VROOT object, must untraverse */ ! if (vp->v_flag & VROOT) { /* extra hold for vp since untraverse might rele */ VN_HOLD(vp); stubvp = untraverse(vp); /* ! * If vp/stubvp are same, we must be at system * root because untraverse returned same vp * for a VROOT object. sarg->vap was setup * before we got here, so there's no need to do * another getattr -- just use the one in sarg. */ --- 1301,1319 ---- vnode_t *stubvp = NULL, *vp; vp = sarg->cs->vp; sarg->mntdfid_set = FALSE; ! /* VROOT object or zone's root, must untraverse */ ! if ((vp->v_flag & VROOT) || VN_IS_CURZONEROOT(vp)) { /* extra hold for vp since untraverse might rele */ VN_HOLD(vp); stubvp = untraverse(vp); /* ! * If vp/stubvp are same, we must be at system-or-zone * root because untraverse returned same vp * for a VROOT object. sarg->vap was setup * before we got here, so there's no need to do * another getattr -- just use the one in sarg. */
*** 1375,1388 **** if (sarg->op == NFS4ATTR_SETIT) error = EINVAL; break; /* this attr is supported */ case NFS4ATTR_GETIT: case NFS4ATTR_VERIT: ! if (! sarg->mntdfid_set) error = rfs4_get_mntdfileid(cmd, sarg); ! if (! error && sarg->mntdfid_set) { if (cmd == NFS4ATTR_GETIT) na->mounted_on_fileid = sarg->mounted_on_fileid; else if (na->mounted_on_fileid != sarg->mounted_on_fileid) --- 1375,1388 ---- if (sarg->op == NFS4ATTR_SETIT) error = EINVAL; break; /* this attr is supported */ case NFS4ATTR_GETIT: case NFS4ATTR_VERIT: ! if (!sarg->mntdfid_set) error = rfs4_get_mntdfileid(cmd, sarg); ! if (!error && sarg->mntdfid_set) { if (cmd == NFS4ATTR_GETIT) na->mounted_on_fileid = sarg->mounted_on_fileid; else if (na->mounted_on_fileid != sarg->mounted_on_fileid)