Lines Matching full:mp
73 static int vfs_hang_addrlist(struct mount *mp, struct netexport *nep,
102 vfs_hang_addrlist(struct mount *mp, struct netexport *nep, in vfs_hang_addrlist() argument
128 if (mp->mnt_flag & MNT_DEFEXPORTED) { in vfs_hang_addrlist()
129 vfs_mount_error(mp, in vfs_hang_addrlist()
130 "MNT_DEFEXPORTED already set for mount %p", mp); in vfs_hang_addrlist()
144 MNT_ILOCK(mp); in vfs_hang_addrlist()
145 mp->mnt_flag |= MNT_DEFEXPORTED; in vfs_hang_addrlist()
146 MNT_IUNLOCK(mp); in vfs_hang_addrlist()
152 vfs_mount_error(mp, "ex_addrlen %d is greater than %d", in vfs_hang_addrlist()
165 vfs_mount_error(mp, "Invalid saddr->sa_family: %d"); in vfs_hang_addrlist()
199 vfs_mount_error(mp, "%s %s %d", in vfs_hang_addrlist()
209 vfs_mount_error(mp, in vfs_hang_addrlist()
297 * The do_exjail argument should be true if *mp is in the mountlist
302 vfs_export(struct mount *mp, struct export_args *argp, bool do_exjail) in vfs_export() argument
320 lockmgr(&mp->mnt_explock, LK_EXCLUSIVE, NULL); in vfs_export()
321 nep = mp->mnt_export; in vfs_export()
327 MNT_ILOCK(mp); in vfs_export()
328 if (mp->mnt_exjail != NULL && mp->mnt_exjail->cr_prison != pr && in vfs_export()
330 MNT_IUNLOCK(mp); in vfs_export()
334 } else if (mp->mnt_exjail != NULL && in vfs_export()
335 mp->mnt_exjail->cr_prison != pr) { in vfs_export()
336 MNT_IUNLOCK(mp); in vfs_export()
341 MNT_IUNLOCK(mp); in vfs_export()
342 if (mp->mnt_flag & MNT_EXPUBLIC) { in vfs_export()
344 MNT_ILOCK(mp); in vfs_export()
345 mp->mnt_flag &= ~MNT_EXPUBLIC; in vfs_export()
346 MNT_IUNLOCK(mp); in vfs_export()
349 mp->mnt_export = NULL; in vfs_export()
352 MNT_ILOCK(mp); in vfs_export()
353 cr = mp->mnt_exjail; in vfs_export()
354 mp->mnt_exjail = NULL; in vfs_export()
355 mp->mnt_flag &= ~(MNT_EXPORTED | MNT_DEFEXPORTED); in vfs_export()
356 MNT_IUNLOCK(mp); in vfs_export()
364 MNT_ILOCK(mp); in vfs_export()
365 if (mp->mnt_exjail == NULL) { in vfs_export()
366 MNT_IUNLOCK(mp); in vfs_export()
372 } else if (mp->mnt_exjail->cr_prison != pr) { in vfs_export()
373 MNT_IUNLOCK(mp); in vfs_export()
377 MNT_IUNLOCK(mp); in vfs_export()
381 mp->mnt_export = nep; in vfs_export()
385 if ((error = vfs_setpublicfs(mp, nep, argp)) != 0) { in vfs_export()
387 mp->mnt_export = NULL; in vfs_export()
393 MNT_ILOCK(mp); in vfs_export()
394 if (do_exjail && mp->mnt_exjail == NULL) { in vfs_export()
395 mp->mnt_exjail = crhold(curthread->td_ucred); in vfs_export()
398 mp->mnt_flag |= MNT_EXPUBLIC; in vfs_export()
399 MNT_IUNLOCK(mp); in vfs_export()
405 if ((error = vfs_hang_addrlist(mp, nep, argp))) { in vfs_export()
407 mp->mnt_export = NULL; in vfs_export()
412 MNT_ILOCK(mp); in vfs_export()
413 if (do_exjail && mp->mnt_exjail == NULL) { in vfs_export()
414 mp->mnt_exjail = crhold(curthread->td_ucred); in vfs_export()
417 mp->mnt_flag |= MNT_EXPORTED; in vfs_export()
418 MNT_IUNLOCK(mp); in vfs_export()
422 lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); in vfs_export()
428 * mp->mnt_export, so we can safely delete the "export" mount option in vfs_export()
431 vfs_deleteopt(mp->mnt_optnew, "export"); in vfs_export()
432 vfs_deleteopt(mp->mnt_opt, "export"); in vfs_export()
442 struct mount *mp; in vfs_exjail_delete() local
463 TAILQ_FOREACH(mp, &mountlist, mnt_list) { in vfs_exjail_delete()
464 MNT_ILOCK(mp); in vfs_exjail_delete()
465 if (mp->mnt_exjail != NULL && in vfs_exjail_delete()
466 mp->mnt_exjail->cr_prison == pr) { in vfs_exjail_delete()
467 MNT_IUNLOCK(mp); in vfs_exjail_delete()
468 error = vfs_busy(mp, MBF_MNTLSTLOCK | MBF_NOWAIT); in vfs_exjail_delete()
482 MNT_ILOCK(mp); in vfs_exjail_delete()
483 if (mp->mnt_exjail != NULL && in vfs_exjail_delete()
484 mp->mnt_exjail->cr_prison == pr) { in vfs_exjail_delete()
485 cr = mp->mnt_exjail; in vfs_exjail_delete()
486 mp->mnt_exjail = NULL; in vfs_exjail_delete()
488 MNT_IUNLOCK(mp); in vfs_exjail_delete()
498 lockmgr(&mp->mnt_explock, LK_EXCLUSIVE, NULL); in vfs_exjail_delete()
499 MNT_ILOCK(mp); in vfs_exjail_delete()
500 if (mp->mnt_exjail != NULL && in vfs_exjail_delete()
501 mp->mnt_exjail->cr_prison == pr) { in vfs_exjail_delete()
502 cr = mp->mnt_exjail; in vfs_exjail_delete()
503 mp->mnt_exjail = NULL; in vfs_exjail_delete()
504 mp->mnt_flag &= ~(MNT_EXPORTED | MNT_DEFEXPORTED); in vfs_exjail_delete()
505 MNT_IUNLOCK(mp); in vfs_exjail_delete()
506 vfs_free_addrlist(mp->mnt_export); in vfs_exjail_delete()
507 free(mp->mnt_export, M_MOUNT); in vfs_exjail_delete()
508 mp->mnt_export = NULL; in vfs_exjail_delete()
510 MNT_IUNLOCK(mp); in vfs_exjail_delete()
511 lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); in vfs_exjail_delete()
517 vfs_unbusy(mp); in vfs_exjail_delete()
522 MNT_IUNLOCK(mp); in vfs_exjail_delete()
532 vfs_setpublicfs(struct mount *mp, struct netexport *nep, in vfs_setpublicfs() argument
540 * mp == NULL -> invalidate the current info, the FS is in vfs_setpublicfs()
544 if (mp == NULL) { in vfs_setpublicfs()
558 if (nfs_pub.np_valid != 0 && mp != nfs_pub.np_mount) in vfs_setpublicfs()
565 nfs_pub.np_handle.fh_fsid = mp->mnt_stat.f_fsid; in vfs_setpublicfs()
567 if ((error = VFS_ROOT(mp, LK_EXCLUSIVE, &rvp))) in vfs_setpublicfs()
602 nfs_pub.np_mount = mp; in vfs_setpublicfs()
614 vfs_export_lookup(struct mount *mp, struct sockaddr *nam) in vfs_export_lookup() argument
622 nep = mp->mnt_export; in vfs_export_lookup()
625 if ((mp->mnt_flag & MNT_EXPORTED) == 0) in vfs_export_lookup()
654 if (np == NULL && (mp->mnt_flag & MNT_DEFEXPORTED) != 0) in vfs_export_lookup()
670 vfs_stdcheckexp(struct mount *mp, struct sockaddr *nam, uint64_t *extflagsp, in vfs_stdcheckexp() argument
675 lockmgr(&mp->mnt_explock, LK_SHARED, NULL); in vfs_stdcheckexp()
676 np = vfs_export_lookup(mp, nam); in vfs_stdcheckexp()
678 lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); in vfs_stdcheckexp()
695 lockmgr(&mp->mnt_explock, LK_RELEASE, NULL); in vfs_stdcheckexp()