Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nullfs/null_subr.c
Show First 20 Lines • Show All 257 Lines • ▼ Show 20 Lines | null_nodeget(mp, lowervp, vpp) | ||||
if (lowervp == MOUNTTONULLMOUNT(mp)->nullm_lowerrootvp) | if (lowervp == MOUNTTONULLMOUNT(mp)->nullm_lowerrootvp) | ||||
vp->v_vflag |= VV_ROOT; | vp->v_vflag |= VV_ROOT; | ||||
/* | /* | ||||
* We might miss the case where lower vnode sets VIRF_PGREAD | * We might miss the case where lower vnode sets VIRF_PGREAD | ||||
* some time after construction, which is typical case. | * some time after construction, which is typical case. | ||||
* null_open rechecks. | * null_open rechecks. | ||||
*/ | */ | ||||
if ((lowervp->v_irflag & VIRF_PGREAD) != 0) { | if ((vn_irflag_read(lowervp) & VIRF_PGREAD) != 0) { | ||||
MPASS(lowervp->v_object != NULL); | MPASS(lowervp->v_object != NULL); | ||||
if ((vp->v_irflag & VIRF_PGREAD) == 0) { | if ((vn_irflag_read(vp) & VIRF_PGREAD) == 0) { | ||||
if (vp->v_object == NULL) | if (vp->v_object == NULL) | ||||
vp->v_object = lowervp->v_object; | vp->v_object = lowervp->v_object; | ||||
else | else | ||||
MPASS(vp->v_object == lowervp->v_object); | MPASS(vp->v_object == lowervp->v_object); | ||||
VI_LOCK(vp); | VI_LOCK(vp); | ||||
vp->v_irflag |= VIRF_PGREAD; | vn_irflag_set(vp, VIRF_PGREAD); | ||||
kib: May be add vn_irflag_set_unlocked() that does VI_LOCK/set/VI_UNLOCK. | |||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
} else { | } else { | ||||
MPASS(vp->v_object != NULL); | MPASS(vp->v_object != NULL); | ||||
} | } | ||||
} | } | ||||
/* | /* | ||||
* Atomically insert our new node into the hash or vget existing | * Atomically insert our new node into the hash or vget existing | ||||
▲ Show 20 Lines • Show All 65 Lines • Show Last 20 Lines |
May be add vn_irflag_set_unlocked() that does VI_LOCK/set/VI_UNLOCK.