Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nullfs/null_vfsops.c
Show First 20 Lines • Show All 157 Lines • ▼ Show 20 Lines | nullfs_mount(struct mount *mp) | ||||
xmp = (struct null_mount *) malloc(sizeof(struct null_mount), | xmp = (struct null_mount *) malloc(sizeof(struct null_mount), | ||||
M_NULLFSMNT, M_WAITOK | M_ZERO); | M_NULLFSMNT, M_WAITOK | M_ZERO); | ||||
/* | /* | ||||
* Save pointer to underlying FS and the reference to the | * Save pointer to underlying FS and the reference to the | ||||
* lower root vnode. | * lower root vnode. | ||||
*/ | */ | ||||
xmp->nullm_vfs = lowerrootvp->v_mount; | xmp->nullm_vfs = vfs_pin_from_vp(lowerrootvp); | ||||
if (xmp->nullm_vfs == NULL) { | |||||
vput(lowerrootvp); | |||||
free(xmp, M_NULLFSMNT); | |||||
return (ENOENT); | |||||
} | |||||
vref(lowerrootvp); | vref(lowerrootvp); | ||||
xmp->nullm_lowerrootvp = lowerrootvp; | xmp->nullm_lowerrootvp = lowerrootvp; | ||||
mp->mnt_data = xmp; | mp->mnt_data = xmp; | ||||
/* | /* | ||||
markj: Stray newline? | |||||
* Make sure the node alias worked. | * Make sure the node alias worked. | ||||
*/ | */ | ||||
error = null_nodeget(mp, lowerrootvp, &nullm_rootvp); | error = null_nodeget(mp, lowerrootvp, &nullm_rootvp); | ||||
if (error != 0) { | if (error != 0) { | ||||
vfs_unpin(xmp->nullm_vfs); | |||||
vrele(lowerrootvp); | vrele(lowerrootvp); | ||||
free(xmp, M_NULLFSMNT); | free(xmp, M_NULLFSMNT); | ||||
return (error); | return (error); | ||||
} | } | ||||
if (NULLVPTOLOWERVP(nullm_rootvp)->v_mount->mnt_flag & MNT_LOCAL) { | if (NULLVPTOLOWERVP(nullm_rootvp)->v_mount->mnt_flag & MNT_LOCAL) { | ||||
MNT_ILOCK(mp); | MNT_ILOCK(mp); | ||||
mp->mnt_flag |= MNT_LOCAL; | mp->mnt_flag |= MNT_LOCAL; | ||||
▲ Show 20 Lines • Show All 74 Lines • ▼ Show 20 Lines | if ((mntdata->nullm_flags & NULLM_CACHE) != 0) { | ||||
MNT_ILOCK(ump); | MNT_ILOCK(ump); | ||||
while ((ump->mnt_kern_flag & MNTK_VGONE_UPPER) != 0) { | while ((ump->mnt_kern_flag & MNTK_VGONE_UPPER) != 0) { | ||||
ump->mnt_kern_flag |= MNTK_VGONE_WAITER; | ump->mnt_kern_flag |= MNTK_VGONE_WAITER; | ||||
msleep(&ump->mnt_uppers, &ump->mnt_mtx, 0, "vgnupw", 0); | msleep(&ump->mnt_uppers, &ump->mnt_mtx, 0, "vgnupw", 0); | ||||
} | } | ||||
TAILQ_REMOVE(&ump->mnt_uppers, mp, mnt_upper_link); | TAILQ_REMOVE(&ump->mnt_uppers, mp, mnt_upper_link); | ||||
MNT_IUNLOCK(ump); | MNT_IUNLOCK(ump); | ||||
} | } | ||||
vfs_unpin(ump); | |||||
vrele(mntdata->nullm_lowerrootvp); | vrele(mntdata->nullm_lowerrootvp); | ||||
mp->mnt_data = NULL; | mp->mnt_data = NULL; | ||||
free(mntdata, M_NULLFSMNT); | free(mntdata, M_NULLFSMNT); | ||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
nullfs_root(mp, flags, vpp) | nullfs_root(mp, flags, vpp) | ||||
▲ Show 20 Lines • Show All 197 Lines • Show Last 20 Lines |
Stray newline?