Lines Matching +full:vp +full:- +full:p

1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
8 * Jan-Simon Pendry.
89 NULLFSDEBUG("nullfs_mount(mp = %p)\n", (void *)mp); in nullfs_mount()
91 if (mp->mnt_flag & MNT_ROOTFS) in nullfs_mount()
95 * Update is a no-op in nullfs_mount()
97 if (mp->mnt_flag & MNT_UPDATE) { in nullfs_mount()
101 if (vfs_flagopt(mp->mnt_optnew, "export", NULL, 0)) in nullfs_mount()
110 error = vfs_getopt(mp->mnt_optnew, "from", (void **)&target, &len); in nullfs_mount()
112 error = vfs_getopt(mp->mnt_optnew, "target", (void **)&target, &len); in nullfs_mount()
113 if (error || target[len - 1] != '\0') in nullfs_mount()
119 if (mp->mnt_vnodecovered->v_op == &null_vnodeops && in nullfs_mount()
120 VOP_ISLOCKED(mp->mnt_vnodecovered) == LK_EXCLUSIVE) { in nullfs_mount()
121 VOP_UNLOCK(mp->mnt_vnodecovered); in nullfs_mount()
135 * Re-lock vnode. in nullfs_mount()
136 * XXXKIB This is deadlock-prone as well. in nullfs_mount()
139 vn_lock(mp->mnt_vnodecovered, LK_EXCLUSIVE | LK_RETRY); in nullfs_mount()
148 lowerrootvp = ndp->ni_vp; in nullfs_mount()
153 if (mp->mnt_vnodecovered->v_op == &null_vnodeops) { in nullfs_mount()
154 nn = VTONULL(mp->mnt_vnodecovered); in nullfs_mount()
155 if (nn == NULL || lowerrootvp == nn->null_lowervp) { in nullfs_mount()
163 * Lower vnode must be the same type as the covered vnode - we in nullfs_mount()
166 if ((lowerrootvp->v_type != VDIR && lowerrootvp->v_type != VREG) || in nullfs_mount()
167 lowerrootvp->v_type != mp->mnt_vnodecovered->v_type) { in nullfs_mount()
180 xmp->nullm_vfs = vfs_register_upper_from_vp(lowerrootvp, mp, in nullfs_mount()
181 &xmp->upper_node); in nullfs_mount()
182 if (xmp->nullm_vfs == NULL) { in nullfs_mount()
188 xmp->nullm_lowerrootvp = lowerrootvp; in nullfs_mount()
189 mp->mnt_data = xmp; in nullfs_mount()
196 vfs_unregister_upper(xmp->nullm_vfs, &xmp->upper_node); in nullfs_mount()
202 if (NULLVPTOLOWERVP(nullm_rootvp)->v_mount->mnt_flag & MNT_LOCAL) { in nullfs_mount()
204 mp->mnt_flag |= MNT_LOCAL; in nullfs_mount()
208 if (vfs_getopt(mp->mnt_optnew, "cache", NULL, NULL) == 0) { in nullfs_mount()
209 xmp->nullm_flags |= NULLM_CACHE; in nullfs_mount()
210 } else if (vfs_getopt(mp->mnt_optnew, "nocache", NULL, NULL) == 0) { in nullfs_mount()
213 (xmp->nullm_vfs->mnt_kern_flag & MNTK_NULL_NOCACHE) == 0) { in nullfs_mount()
214 xmp->nullm_flags |= NULLM_CACHE; in nullfs_mount()
217 if ((xmp->nullm_flags & NULLM_CACHE) != 0) { in nullfs_mount()
218 vfs_register_for_notification(xmp->nullm_vfs, mp, in nullfs_mount()
219 &xmp->notify_node); in nullfs_mount()
222 if (lowerrootvp == mp->mnt_vnodecovered) { in nullfs_mount()
224 lowerrootvp->v_vflag |= VV_CROSSLOCK; in nullfs_mount()
229 if ((xmp->nullm_flags & NULLM_CACHE) != 0) { in nullfs_mount()
230 mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag & in nullfs_mount()
234 mp->mnt_kern_flag |= MNTK_NOMSYNC | MNTK_UNLOCKED_INSMNTQUE; in nullfs_mount()
235 mp->mnt_kern_flag |= lowerrootvp->v_mount->mnt_kern_flag & in nullfs_mount()
243 mp->mnt_stat.f_mntfromname, mp->mnt_stat.f_mntonname); in nullfs_mount()
256 NULLFSDEBUG("nullfs_unmount: mp = %p\n", (void *)mp); in nullfs_unmount()
269 if (mp->mnt_nvnodelistsize == 0) { in nullfs_unmount()
281 mntdata = mp->mnt_data; in nullfs_unmount()
282 if ((mntdata->nullm_flags & NULLM_CACHE) != 0) { in nullfs_unmount()
283 vfs_unregister_for_notification(mntdata->nullm_vfs, in nullfs_unmount()
284 &mntdata->notify_node); in nullfs_unmount()
286 if (mntdata->nullm_lowerrootvp == mp->mnt_vnodecovered) { in nullfs_unmount()
287 vn_lock(mp->mnt_vnodecovered, LK_EXCLUSIVE | LK_RETRY | LK_CANRECURSE); in nullfs_unmount()
288 mp->mnt_vnodecovered->v_vflag &= ~VV_CROSSLOCK; in nullfs_unmount()
289 VOP_UNLOCK(mp->mnt_vnodecovered); in nullfs_unmount()
291 vfs_unregister_upper(mntdata->nullm_vfs, &mntdata->upper_node); in nullfs_unmount()
292 vrele(mntdata->nullm_lowerrootvp); in nullfs_unmount()
293 mp->mnt_data = NULL; in nullfs_unmount()
301 struct vnode *vp; in nullfs_root() local
306 NULLFSDEBUG("nullfs_root(mp = %p, vp = %p)\n", mp, in nullfs_root()
307 mntdata->nullm_lowerrootvp); in nullfs_root()
309 error = vget(mntdata->nullm_lowerrootvp, flags); in nullfs_root()
311 error = null_nodeget(mp, mntdata->nullm_lowerrootvp, &vp); in nullfs_root()
313 *vpp = vp; in nullfs_root()
328 lowermp = atomic_load_ptr(&mntdata->nullm_vfs); in nullfs_quotactl()
356 NULLFSDEBUG("nullfs_statfs(mp = %p, vp = %p->%p)\n", (void *)mp, in nullfs_statfs()
357 (void *)MOUNTTONULLMOUNT(mp)->nullm_rootvp, in nullfs_statfs()
358 (void *)NULLVPTOLOWERVP(MOUNTTONULLMOUNT(mp)->nullm_rootvp)); in nullfs_statfs()
362 error = VFS_STATFS(MOUNTTONULLMOUNT(mp)->nullm_vfs, mstat); in nullfs_statfs()
368 sbp->f_type = mstat->f_type; in nullfs_statfs()
369 sbp->f_bsize = mstat->f_bsize; in nullfs_statfs()
370 sbp->f_iosize = mstat->f_iosize; in nullfs_statfs()
371 sbp->f_blocks = mstat->f_blocks; in nullfs_statfs()
372 sbp->f_bfree = mstat->f_bfree; in nullfs_statfs()
373 sbp->f_bavail = mstat->f_bavail; in nullfs_statfs()
374 sbp->f_files = mstat->f_files; in nullfs_statfs()
375 sbp->f_ffree = mstat->f_ffree; in nullfs_statfs()
385 * XXX - Assumes no data cached at null layer. in nullfs_sync()
398 error = VFS_VGET(MOUNTTONULLMOUNT(mp)->nullm_vfs, ino, flags, vpp); in nullfs_vget()
409 error = VFS_FHTOVP(MOUNTTONULLMOUNT(mp)->nullm_vfs, fidp, flags, in nullfs_fhtovp()
421 return (VFS_EXTATTRCTL(MOUNTTONULLMOUNT(mp)->nullm_vfs, cmd, in nullfs_extattrctl()
428 struct vnode *vp; in nullfs_reclaim_lowervp() local
430 vp = null_hashget(mp, lowervp); in nullfs_reclaim_lowervp()
431 if (vp == NULL) in nullfs_reclaim_lowervp()
433 VTONULL(vp)->null_flags |= NULLV_NOUNLOCK; in nullfs_reclaim_lowervp()
434 vgone(vp); in nullfs_reclaim_lowervp()
435 vput(vp); in nullfs_reclaim_lowervp()
441 struct vnode *vp; in nullfs_unlink_lowervp() local
444 vp = null_hashget(mp, lowervp); in nullfs_unlink_lowervp()
445 if (vp == NULL) in nullfs_unlink_lowervp()
447 xp = VTONULL(vp); in nullfs_unlink_lowervp()
448 xp->null_flags |= NULLV_DROP | NULLV_NOUNLOCK; in nullfs_unlink_lowervp()
449 vhold(vp); in nullfs_unlink_lowervp()
450 vunref(vp); in nullfs_unlink_lowervp()
452 if (vp->v_usecount == 0) { in nullfs_unlink_lowervp()
460 KASSERT(VN_IS_DOOMED(vp), in nullfs_unlink_lowervp()
461 ("not reclaimed nullfs vnode %p", vp)); in nullfs_unlink_lowervp()
462 VOP_UNLOCK(vp); in nullfs_unlink_lowervp()
470 ASSERT_VOP_ELOCKED(vp, "unlink_lowervp"); in nullfs_unlink_lowervp()
471 KASSERT(!VN_IS_DOOMED(vp), in nullfs_unlink_lowervp()
472 ("reclaimed nullfs vnode %p", vp)); in nullfs_unlink_lowervp()
473 xp->null_flags &= ~NULLV_NOUNLOCK; in nullfs_unlink_lowervp()
475 vdrop(vp); in nullfs_unlink_lowervp()